Rational NaturalToRational(int n)
{ int s=(1+(int)sqrt(8*n+1))/2;
int t=n-(s*s-s)/2;
return Rational(t, s-t); }
int RationalToNatural(Rational r)
{ return ((r.top+r.bot)*(r.top+r.bot)+r.top-r.bot)/2; }
Rational NextAfter(Rational r)
{ int t=r.top+1, b=r.bot-1, s=r.top+r.bot;
if (t>=s) { t=0; b=s+1; }
return Rational(t,b); }