#include long long x,y,i,l; long long a,b,c,a1,b1,c1,a2,b2,c2; #define CISLO 1500 long long z[CISLO+5]; void map(long long x, long long *a, long long *b, long long *c) { long long i,k,s,o,total; *a=0; *b=0; *c=0; if (x==1) return; total=1; for (i=1;;i++) { if (total+6*i>=x) break; total+=6*i; } k=i; o=x-total-1; s=o/i; o=(o%i)+1; switch(s) { case 0: *a=o; *c=o-k; break; case 1: *a=k-o; *b=o; break; case 2: *b=k-o; *c=o; break; case 3: *a=-o; *c=k-o; break; case 4: *a=o-k; *b=-o; break; case 5: *b=k-o; *c=-o; break; } } void prinasob(long long *x, long long c) { long long i; for (i=0;i=0;i--) { c=(10000*c)+x[i]; x[i]=c/d; c=c%d; } } long long hmin(long long a, long long b) { if (a>0) { return a0?a:-a; } int main() { while(1) { scanf("%lld %lld",&x,&y); if (x==0 && y==0) break; map(x,&a1,&b1,&c1); map(y,&a2,&b2,&c2); a=a1-a2; b=b1-b2; c=c1-c2; a+=b; c+=b; b=0; if (a*c>0) { b=hmin(a,c); a-=b; c-=b; } a=xabs(a); b=xabs(b); c=xabs(c); l=a+b+c; memset(z,0,sizeof(z)); z[0]=1; for (i=1;i<=l;i++) prinasob(z,i); for (i=1;i<=a;i++) podel(z,i); for (i=1;i<=b;i++) podel(z,i); for (i=1;i<=c;i++) podel(z,i); for (i=CISLO-1;i>=0;i--) if (z[i]!=0) break; if (i==0 && z[0]==1) printf("There is 1 route of the shortest length %lld.\n",l); else { printf("There are "); printf("%lld",z[i]); for (i--;i>=0;i--) printf("%03lld",z[i]); printf(" routes of the shortest length %lld.\n",l); } } return 0; }