#include #include #include #include #include const int N = 100; using namespace std; struct num { int d[N]; num() { fill (d, d + N, 0); } num(char* str) { fill (d, d + N, 0); int l = strlen(str); int p = 0; for (int i = l - 1; i >= 0; --i) d[p++] = str[i] - '0'; } void add(int pos) { if (d[pos] == 0) d[pos] = 1; else { d[pos] = 0; if (pos == 0) add(1); else if (pos == 1) { add(2); add(0); } else { add(pos + 1); add(pos - 2); } } } void normalize() { bool done; do { done = true; for (int i = 0; i < N - 1; ++i) { if (d[i] && d[i + 1]) { done = false; d[i] = 0; d[i + 1] = 0; add(i + 2); } } } while(!done); } int len() { int i = N - 1; while (i > 0 && !d[i]) --i; return i; } void print(int len) { while (len >= 0) putchar(d[len--] + '0'); } }; void id(int n, char ch = ' ') { while(n-- > 0) putchar(ch); } int main() { char sd1[N]; char sd2[N]; while (scanf("%s %s", sd1, sd2) == 2) { num n1(sd1); num n2(sd2); num n3(sd1); for (int i = 0; i < N; ++i) { if (n2.d[i]) n3.add(i); } n1.normalize(); n2.normalize(); n3.normalize(); int l1 = n1.len(); int l2 = n2.len(); int l3 = n3.len(); int d1 = l3 - l1; int d2 = l3 - l2; id(2 + d1); n1.print(l1); printf("\n"); putchar('+'); id(1 + d2); n2.print(l2); printf("\n"); id(2); id(1 + l3, '-'); printf("\n"); id(2); n3.print(l3); printf("\n\n"); } return 0; }