#include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef long long int lint; typedef long long ll; void substract(string& pos, string const& neg, int len) { int carry = 0; int i = 0; for (i = 0; i < len; ++i) { if (pos[i] >= neg[i] + carry) { pos[i] = pos[i] - (neg[i] + carry); carry = 0; } else { int n = neg[i] + carry; pos[i] = (n - pos[i]) % 2; carry = 1; } } if (carry) { } } int main() { string nb(1000000, 0); while (getline(cin, nb)) { for (int i=0; i < nb.size(); ++i) { nb[i] -= '0'; } reverse(nb.begin(), nb.end()); nb.push_back(0); nb.push_back(0); nb.push_back(0); for (int i = 0; i < nb.size() - 1; ++i) { if (nb[i + 1] == 1 && nb[i] == 2) { nb[i + 1] = 0; nb[i] = 0; break; } if ((i % 2) == 0) { if (nb[i] == 0) { nb[i] = 1; break; } else { nb[i] = 0; if (nb[i + 1] == 1) { nb[i + 1] = 0; break; } else continue; } } else { nb[i] = nb[i] + 1; nb[i + 1]++; if (nb[i] == 2 && nb[i + 1] == 1) { nb[i + 1] = 0; nb[i] = 0; break; } else if (nb[i] == 2 && nb[i + 1] == 2) { nb[i] = 0; nb[i + 1] = 1; break; } else if (nb[i] == 1 && nb[i + 1] == 1) { break; } else // (nb[i] == 1 && nb[i + 1] == 2) { //nb[i + 1] = 0; continue; } } } reverse(nb.begin(), nb.end()); int i = 0; while (i < nb.size() && nb[i] == 0) ++i; if (i == nb.size()) { printf("0\n"); continue; } for (; i < nb.size(); ++i) { printf("%c", nb[i] + '0'); } printf("\n"); } }