#include #include #include #include #include using namespace std; #define i64 __int64 class fraction { private: inline i64 Gcd (i64 x,i64 y) { return y==0?x:Gcd(y,x%y); } i64 Lcm (i64 x,i64 y) { x=x/Gcd(x,y)*y; if(x<0) x=-x; return x; } public: i64 a,b; fraction () {} fraction (i64 x) { a=x; b=1; } fraction (i64 x,i64 y) { a=x; b=y; Refresh(); } void Refresh () { if (b<0) b=-b,a=-a; i64 k=Gcd(a,b); if (k<0) k=-k; a/=k; b/=k; } fraction Inverse () const { return fraction (b,a); } fraction operator + (fraction p) { fraction ans; ans.b=Lcm(b,p.b); ans.a=ans.b/b*a+ans.b/p.b*p.a; ans.Refresh(); return ans; } fraction operator - (fraction p) { fraction ans; ans.b=Lcm(b,p.b); ans.a=ans.b/b*a-ans.b/p.b*p.a; ans.Refresh(); return ans; } fraction operator * (fraction p) { fraction ans; ans.a=a*p.a; ans.b=b*p.b; ans.Refresh(); return ans; } fraction operator / (fraction p) { fraction ans; ans.a=a*p.b; ans.b=b*p.a; ans.Refresh(); return ans; } bool operator < (const fraction &p) const { return a*p.b (const fraction &p) const { return a*p.b>b*p.a; } bool operator == (const fraction &p) const { return a*p.b==b*p.a; } fraction operator | (fraction p) { fraction t1=fraction (b,a); fraction t2=p.Inverse (); t1=t1+t2; return t1.Inverse(); } void print () { printf("%I64d/%I64d\n",a,b); } }; string s; int len; fraction read (int &now) { int fz=0,fm=0; int i; for (i=now;i