#include #include #include using namespace std; //int data[2][100000002]; map mapa; map mapb; int newa, newb; bool fa, fb; int a, b, da, db; int step; int pocitaj(int x) { if(x%2==0) x=x/2; else x=3*x+1; return x; } int main() { while(true) { scanf("%d %d", &a, &b); da = a; db = b; if(a == 0 && b==0) break; fa = true; fb = true; /*for(int i=0; i<10000002; i++) { data[0][i] = 0; data[1][i] = 0; }*/ //memset(data[0], 0, sizeof(data[0])); //memset(data[1], 0, sizeof(data[1])); step = 1; //data[0][a] = step; //data[1][b] = step; mapa[a] = step; mapb[b] = step; step++; if(a == b) printf("%d needs %d steps, %d needs %d steps, they meet at %d\n", a, 0, b, 0, a); else while(true) { if(fa) { newa = pocitaj(a); if(!mapa[newa]) { a = newa; mapa[a] = step; } else fa = false; } if(fb) { newb = pocitaj(b); if(!mapb[newb]) { b = newb; mapb[b] = step; } else fb = false; } //data[0][a] = step; //data[1][b] = step; step++; //printf("%d\n", step); //if(data[0][a] != 0 && data[1][a] != 0) if(mapa[a] && mapb[a]) { //printf("%d needs %d steps, %d needs %d steps, they meet at %d\n", da, data[0][a]-1, db, data[1][a]-1, a); printf("%d needs %d steps, %d needs %d steps, they meet at %d\n", da, mapa[a]-1, db, mapb[a]-1, a); break; } //if(data[0][b] != 0 && data[1][b] != 0) if(mapa[b] && mapb[b]) { //printf("%d needs %d steps, %d needs %d steps, they meet at %d\n", da, data[0][b]-1, db, data[1][b]-1, b); printf("%d needs %d steps, %d needs %d steps, they meet at %d\n", da, mapa[b]-1, db, mapb[b]-1, b); break; } } mapa.clear(); mapb.clear(); } return 0; }