#include #include #include using namespace std; char s[100]; char s1[100],s2[100]; char vys[100]; int m,n1,n2; void canon(char *s, int &n) { int i,j,d; char *c=s; j=0; for (i=0; i='1' || s[1]>='1' || s[2]>='1') { if (s-c==1 && *s>='2') { *s-=2; ++s[1]; ++s[-1]; } else while (*s>='2') { *(s-2)='1'; s[0]-=2; ++s[1]; d=1; } if (*s<=s[1] && *s=='1') { ++s[2]; *s='0'; --s[1]; d=1; } ++s; } n=s-c; if (d) canon(c,n); } int dl; void test(char *s,int zb) { if (zb>dl) dl=zb; if (zb==0) { s[1]+=(s[0]-'0')/2; s[0]=(s[0]-'0')%2+'0'; if (s[1]>'0') { if (s[2]>'0') test(s+2,zb+2); else test(s+1,zb+1); } } else { while (*s>='2') { if (zb==1) { ++s[1]; s[0]-=2; ++s[-1]; } else { ++s[1]; s[0]-=2; ++s[-2]; } if (s[2]>'0') test(s+2,zb+2); else test(s+1,zb+1); } if (*s=='1' && s[-1]>='1') { ++s[1]; --s[0]; --s[-1]; if (s[2]>'0') test(s+2,zb+2); else test(s+1,zb+1); } } } void canon2(char *s,int &n) { int i; char *c=s; s+=n-1; dl=0; while (s>=c) { test(s,s-c); --s; } n=dl+1; } int main() { int i; while (gets(s)) { strcpy(s1,strtok(s," ")); strcpy(s2,strtok(NULL," ")); n1=strlen(s1); n2=strlen(s2); if (s1[n1-1]==' ') s1[--n1]=0; if (s2[n2-1]==' ') s2[--n2]=0; reverse(s1,s1+n1); reverse(s2,s2+n2); for (i=n1; i<100; ++i) s1[i]='0'; for (i=n1-1; i>0; --i) if (s1[i]=='0') --n1; for (i=n2; i<100; ++i) s2[i]='0'; for (i=n2-1; i>0; --i) if (s2[i]=='0') --n2; for (i=0; i<100; ++i) vys[i]='0'; canon2(s1,n1); canon2(s2,n2); m=n1>n2?n1:n2; for (i=0; i