#include #include #define MAX 1000000L #define POCET 10000000 //int pa[MAX], pb[MAX]; //long long qa[POCET], qb[POCET]; //int ra[POCET], rb[POCET]; //int pca, pcb; std::map pa, pb; void pridaj(long long k, int v, int ab) { (ab?pb:pa).insert(std::make_pair(k,v)); } int hladaj(long long k,int ab) { std::map::iterator it; if (!ab) { it=pa.find(k); } else { it=pb.find(k); } if (it != (ab?pb:pa).end()) return it->second; return -1; } int main(void) { int a,b, sa,sb,s; long long int ax, bx; while(1) { scanf("%d %d\n", &a, &b); //a=rand()%1000000+1; //b=rand()%1000000+1; if (a==0 && b==0) break; pa.clear(); pb.clear(); ax=a; bx=b; sa=0; sb=0; while (1) { if (hladaj(ax, 0)<0) pridaj(ax,sa,0); if (hladaj(bx, 1)<0) pridaj(bx, sb, 1); if (hladaj(ax,1)>=0) { sb = hladaj(ax,1); //sb=pb[ax]; s=ax; break; } if (hladaj(bx,0)>=0) { sa = hladaj(bx,0); //sa=pa[bx]; s=bx; break; } if (ax%2) ax=ax*3+1; else ax/=2; if (bx%2) bx=bx*3+1; else bx/=2; sa++; sb++; } printf("%d needs %d steps, %d needs %d steps, they meet at %d\n", a, sa, b, sb, s); } return 0; }