#include<iostream>

class Fraction {
 private:
    int numerator_;
    int denominator_;


    int GCD(int a, int b) const {
        a = abs(a);
        b = abs(b);
        while (b != 0) {
            int buf(b);
            b = a % b;
            a = buf;
        }
        return a;
    }

    void Normalize() {
        int gcd = GCD(numerator_, denominator_);
        numerator_ /= gcd;
        denominator_ /= gcd;
        if (denominator_ < 0) {
            numerator_ *= -1;
            denominator_ *= -1;
        }
    }

 public:
    Fraction (int numerator, int denominator):
        numerator_(numerator),
        denominator_ (denominator) {
        Normalize();
    }

    Fraction (int integer):
        numerator_(integer),
        denominator_ (1) {
        Normalize();
    }


    int GetNumer() const {
        return numerator_;
    }

    int GetDenom() const {
        return denominator_;
    }

    void SetNumer(int a) {
        numerator_ = a;
        Normalize();
    }

    void Print() const {
        std::cout << numerator_ << " / "
                  << denominator_ << "\n";
    }

    Fraction Multiply(Fraction b) const {
        int new_den = denominator_ * b.denominator_;
        int new_num = numerator_ * b.numerator_;
        return Fraction(new_num, new_den);
    }


};

Fraction operator*(const Fraction& lhs, const Fraction& rhs) {
    int new_den = lhs.GetDenom() * rhs.GetDenom();
    int new_num = lhs.GetNumer() * rhs.GetNumer();
    return Fraction(new_num, new_den);
}


int main() {
    Fraction x(1, 3), y(3, 4);
    x.Print();
//    y.Print();
    int mark = 6;
    (mark * x).Print();
//    x.denominator_ = 5;


    return 0;
}
