func_code_string: #include <bits/stdc++.h>   using namespace std;   const int N = 1e6;   const int inf = 1e9;   const int mod = 1e9 + 7;   const long long INF = 1e18;   long long a00, a01, a10, a11, cnt0, cnt1, cnt01, cnt10, ins = 0, t = -1;   long long p[N];   void get() {     for (int i = 1; i <= ins; ++i) {       cout << 1;     }     if (t == -1) {       for (int i = 0; i < cnt0; ++i) {         cout << 0;       }     } else {       ins++;       for (int i = 0; i < cnt0 - t; ++i) {         cout << 0;       }       cout << 1;       for (int i = cnt0 - t; i < cnt0; ++i) {         cout << 0;       }     }     for (int i = ins + 1; i <= cnt1; ++i) {       cout << 1;     }   }   int main() {     ios_base::sync_with_stdio(false);     cin.tie(NULL);     for (long long a = 1; a * (a - 1) / 2 < 1e11 + 1000; ++a) {       p[a] = a * (a - 1) / 2;     }     cin >> a00 >> a01 >> a10 >> a11;     if (!a00 && !a01 && !a10 && !a11) {       return cout << 0, 0;     }     for (int i = 1; i < N; ++i) {       if (p[i] > a00) {         return cout <<  Impossible , 0;       }       if (a00 == p[i]) {         cnt0 = i;         break;       }     }     for (int i = 1; i < N; ++i) {       if (p[i] > a11) {         return cout <<  Impossible , 0;       }       if (a11 == p[i]) {         cnt1 = i;         break;       }     }     if (!a01 && !a10) {       if (!a00) {         for (int i = 0; i < cnt1; ++i) {           cout << 1;         }         return 0;       }       if (!a11) {         for (int i = 0; i < cnt0; ++i) {           cout << 0;         }         return 0;       }     }     if (cnt0 * cnt1 != a01 + a10) {       return cout <<  Impossible , 0;     }     cnt01 = cnt0 * cnt1;     cnt10 = 0;     for (int i = 1; i <= cnt1; ++i) {       if (cnt01 - cnt0 >= a01) {         cnt01 -= cnt0;         cnt10 += cnt0;         ++ins;       } else {         t = cnt01 - a01;         cnt01 -= t;         cnt10 += t;       }       if (cnt01 == a01 && cnt10 == a10) {         get();         return 0;       }     }     return 0;   }   