#include #include #define MAX 50 int a,b,c; char str_a[MAX], str_b[MAX]; char radek[200]; int f[50]; int to_num(char *str) { int num, i,j; num = 0; for(i=strlen(str)-1,j=0; i>=0; i--,j++) { if( str[i]=='1' ) num += f[j]; } return num; } void to_fib(int n, int len) { int i; for(i=len; i >=0 ; i--) { if( n/f[i]>0 ) putchar('1'); else putchar('0'); n = n % f[i]; } } int main() { int i; int len[3]; f[0]=1; f[1]=2; for(i=2; i<42; i++) f[i]=f[i-1]+f[i-2]; while( fgets( radek, 200, stdin )!= NULL ) { if(sscanf(radek,"%s %s\n", str_a, str_b)!=2 ) continue; a = to_num(str_a); b = to_num(str_b); c = a+b; for(i=0;i<3;i++) len[i]=0; for(i=0; i<40; i++) { if(a/f[i] > 0) len[0]=i; if(b/f[i] > 0) len[1]=i; if(c/f[i] > 0) len[2]=i; } for(i=0 ; i< len[2]-len[0]+2; i++) putchar(' '); to_fib(a,len[0]); putchar('\n');putchar('+'); for(i=0 ; i< len[2]-len[1]+1; i++) putchar(' '); to_fib(b,len[1]); printf("\n "); for(i=0 ; i< len[2]+1; i++) putchar('-'); printf("\n "); to_fib(c,len[2]); putchar('\n'); putchar('\n'); } return 0; }