#include <iostream>
using namespace std;
class Fraction {
protected:
int n, d;
int gcd(int N, int D) { return (N == 0? D: gcd(D%N, N)); }
void restrict() {int t = gcd(this->n, this->d); this->n =this->n / t; this->d /= t;}
public:
Fraction(int n=1, int d=1 ): n(n), d(d) {restrict();}
int getD() {return d;}
int getN() {return n;}
friend Fraction operator*(const Fraction &, const Fraction &);
const Fraction operator+(const Fraction & y) { return Fraction(n * y.d + d * y.n, d * y.d); }
const Fraction operator*(const Fraction & y) { return Fraction(n * y.n, d * y.d); }
Fraction operator*=(const Fraction & y) { n *= y.n; d *= y.d; restrict(); return *this;}
const Fraction operator-() { return Fraction(-n, d); }
Fraction operator++() { n += d; return *this;}
const Fraction operator++(int) {n += d; return Fraction(n-d, d); }
friend std::ostream & operator<<(std::ostream &, const Fraction);
int sum(int b){
return this->n+b;
}
};
Fraction operator*(const Fraction & x, const Fraction & y) { return Fraction(x.n * y.n, x.d * y.d); }
std::ostream & operator<< (std::ostream & out, const Fraction x) {
out << x.n << "/" << x.d;
//out<<"Hello";
return out;
}
int main() {
Fraction x(1,3),y(1,2);
cout<<y+x<<endl;
cout<<y*x<<endl;
}
CiNpbmNsdWRlIDxpb3N0cmVhbT4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKY2xhc3MgRnJhY3Rpb24gewpwcm90ZWN0ZWQ6CglpbnQgbiwgZDsKCWludCBnY2QoaW50IE4sIGludCBEKSB7CXJldHVybiAoTiA9PSAwPyBEOiBnY2QoRCVOLCBOKSk7IH0KCXZvaWQgcmVzdHJpY3QoKSB7aW50IHQgPSBnY2QodGhpcy0+biwgdGhpcy0+ZCk7IHRoaXMtPm4gPXRoaXMtPm4gLyB0OyB0aGlzLT5kIC89IHQ7fQpwdWJsaWM6CglGcmFjdGlvbihpbnQgbj0xLCBpbnQgZD0xICk6IG4obiksIGQoZCkge3Jlc3RyaWN0KCk7fQoJaW50IGdldEQoKSB7cmV0dXJuIGQ7fQoJaW50IGdldE4oKSB7cmV0dXJuIG47fQoKCWZyaWVuZCBGcmFjdGlvbiBvcGVyYXRvciooY29uc3QgRnJhY3Rpb24gJiwgY29uc3QgRnJhY3Rpb24gJik7CgkKCWNvbnN0IEZyYWN0aW9uIG9wZXJhdG9yKyhjb25zdCBGcmFjdGlvbiAmIHkpIHsgcmV0dXJuIEZyYWN0aW9uKG4gKiB5LmQgKyBkICogeS5uLCBkICogeS5kKTsgfQoJY29uc3QgRnJhY3Rpb24gb3BlcmF0b3IqKGNvbnN0IEZyYWN0aW9uICYgeSkgeyByZXR1cm4gRnJhY3Rpb24obiAgKiB5Lm4sIGQgKiB5LmQpOyB9CgkKCUZyYWN0aW9uIG9wZXJhdG9yKj0oY29uc3QgRnJhY3Rpb24gJiB5KSB7IG4gKj0geS5uOyBkICo9IHkuZDsgcmVzdHJpY3QoKTsgcmV0dXJuICp0aGlzO30KCWNvbnN0IEZyYWN0aW9uIG9wZXJhdG9yLSgpIHsgcmV0dXJuIEZyYWN0aW9uKC1uLCBkKTsgfSAKCUZyYWN0aW9uIG9wZXJhdG9yKysoKSB7IG4gKz0gZDsgcmV0dXJuICp0aGlzO30KCWNvbnN0IEZyYWN0aW9uIG9wZXJhdG9yKysoaW50KSB7biArPSBkOyByZXR1cm4gRnJhY3Rpb24obi1kLCBkKTsgfSAKCglmcmllbmQgc3RkOjpvc3RyZWFtICYgIG9wZXJhdG9yPDwoc3RkOjpvc3RyZWFtICYsIGNvbnN0IEZyYWN0aW9uKTsKCglpbnQgc3VtKGludCBiKXsKCQlyZXR1cm4gdGhpcy0+bitiOwoJfQoKfTsKCkZyYWN0aW9uIG9wZXJhdG9yKihjb25zdCBGcmFjdGlvbiAmIHgsIGNvbnN0IEZyYWN0aW9uICYgeSkgeyByZXR1cm4gRnJhY3Rpb24oeC5uICogeS5uLCB4LmQgKiB5LmQpOyB9CgpzdGQ6Om9zdHJlYW0gJiBvcGVyYXRvcjw8IChzdGQ6Om9zdHJlYW0gJiBvdXQsIGNvbnN0IEZyYWN0aW9uIHgpIHsKCW91dCA8PCB4Lm4gPDwgIi8iIDw8IHguZDsKCS8vb3V0PDwiSGVsbG8iOwoJcmV0dXJuIG91dDsKfQoKaW50IG1haW4oKSB7CgkgRnJhY3Rpb24geCgxLDMpLHkoMSwyKTsKCSBjb3V0PDx5K3g8PGVuZGw7CgkgY291dDw8eSp4PDxlbmRsOwp9Cgo=