#include <bits/stdc++.h>   using namespace std;   long long rt(long long a) {     long long p = 0, q = a;     while (p < q) {       long long s = (p + q + 1) / 2;       long long sv = s * (s + 1) / 2;       if (sv < a) p = s;       if (sv > a) q = s - 1;       if (sv == a) return s;     }     if (p * (p + 1) / 2 == a) return p;     return -1;   }   long long a, b, c, d;   bool possible(long long z, long long j) {     long long n = z + j;     if (a + b + c + d != n * (n - 1) / 2) {       return 0;     }     return 1;   }   bool solve(long long z, long long j) {     if (!possible(z, j)) {       return 0;     }     long long n = z + j;     if (j == 0) {       for (int i = 0; i < n; i++) cout <<  0 ;       return 1;     }     if (z == 0) {       for (int i = 0; i < n; i++) cout <<  1 ;       return 1;     }     long long ord[5];     ord[0] = b / j;     ord[2] = (ord[0] * j != b);     ord[3] = b - ord[0] * j;     ord[4] = z - ord[0] - ord[2];     ord[1] = j - ord[3];     for (int i = 0; i < 5; i++) {       for (int k = 0; k < ord[i]; k++) {         cout << (i % 2);       }     }     return 1;   }   int main() {     ios_base::sync_with_stdio(0);     cin >> a >> b >> c >> d;     if (a + b + c + d == 0) {       cout <<  1 n ;       return 0;     }     long long z = rt(a);     long long j = rt(d);     if (z == -1 || j == -1) {       cout <<  Impossible n ;       return 0;     }     ++z;     ++j;     if (z == 1 && j == 1) {       if (solve(0, 0)) return 0;       if (solve(0, 1)) return 0;       if (solve(1, 0)) return 0;       if (solve(1, 1)) return 0;       cout <<  Impossible n ;       return 0;     }     if (z == 1) {       if (solve(0, j)) return 0;       if (solve(1, j)) return 0;       cout <<  Impossible n ;       return 0;     }     if (j == 1) {       if (solve(z, 0)) return 0;       if (solve(z, 1)) return 0;       cout <<  Impossible n ;       return 0;     }     if (solve(z, j)) return 0;     cout <<  Impossible n ;     return 0;   }   