#include<cstdio>
#include<algorithm>
using namespace std;
#define ll long long
ll gcd(ll a, ll b)
{
if(b > a)
swap(a, b);
if(b%a == 0)
return a;
return gcd(a, b%a);
}
struct frac{
ll numer, denom;
frac(ll num = 0) { numer = num; denom = num; }
void simp(){
ll gcdnum = gcd(numer, denom);
numer = numer / gcdnum;
denom = denom / gcdnum;
}
void scan(){
bool point = false, fra = false, pos = true;
char read = getchar();
while(read<'0'||read>'9')
{
if(read == '.'||read == '/')
{
printf("Form Error!\n");
return;
}
if(read == '-')
pos = false;
read = getchar();
}
while(read == '-'||read == '.'||read == '/'||(read>='0'&&read<='9'))
{
if(read == '.')
{
point = true;
read = getchar();
continue;
}
if(read == '/')
{
fra = true;
read = getchar();
continue;
}
if(read == '-')
{
pos = false;
read = getchar();
continue;
}
if(fra)
denom = denom*10+read-'0';
else
{
if(point)
{
if(denom == 0)
denom = 10;
else
denom = denom*10;
}
numer = numer*10+read-'0';
}
read = getchar();
}
if(denom == 0)
denom++;
if(!pos)
numer = numer*(-1);
simp();
}
void print(){
simp();
if(numer == 0)
printf("0");
else if(denom == 1)
printf("%lld", numer);
else
printf("%lld/%lld", numer, denom);
}
void printpoint(){
simp();
printf("%lf", numer*1.0/(denom*1.0));
}
frac operator=(const int& b){
frac ans;
ans.numer = b;
ans.denom = 1;
return ans;
}
frac operator=(const double& b){
double num = b;
frac ans;
ans.denom = 1;
ll ansnumer;
while(1)
{
ansnumer = num*10;
if(ansnumer%10 == 0)
break;
num = num*10;
ans.denom *= 10;
}
ans.numer = b;
return ans;
}
frac operator+(const frac& b){
frac num = b;
simp();
num.simp();
frac ans;
ll gcdnum = gcd(denom, num.denom);
ll pregcd = gcd(gcdnum, denom);
ll lcmnum = (denom/pregcd)*(num.denom/(gcdnum/pregcd));
ans.denom = lcmnum;
ans.numer = numer*(lcmnum/denom)+num.numer*(lcmnum/num.denom);
return ans;
}
frac operator-(const frac& b){
frac realb;
realb.numer = (-1)*b.numer;
realb.denom = b.denom;
return (*this) + realb;
}
frac operator*(const frac& b){
frac num = b;
frac ans;
simp();
num.simp();
ll gcdnum = gcd(numer, num.denom);
ans.numer = numer/gcdnum; ans.denom = num.denom/gcdnum;
gcdnum = gcd(denom, num.numer);
ans.numer= ans.numer*(num.numer/gcdnum); ans.denom = ans.denom*(denom/gcdnum);
return ans;
}
frac operator/(const frac& b){
frac realb;
realb.numer = b.denom;
realb.denom = b.numer;
return (*this) * realb;
}
bool operator>(const frac& b) const{
ll gcdnum = gcd(denom, b.denom);
ll pregcd = gcd(gcdnum, denom);
ll lcmnum = (denom/pregcd)*(b.denom/(gcdnum/pregcd));
return numer*(lcmnum/denom) > b.numer*(lcmnum/b.denom);
}
bool operator<(const frac& b) const{return b > *this;}
bool operator>=(const frac& b) const{return !(b > *this);}
bool operator<=(const frac& b) const{return !(*this > b);}
bool operator==(const frac& b) const{return (*this >= b) & (*this <= b);}
bool operator!=(const frac& b) const{return !(*this == b);}
};
int main()
{
return 0;
}