#include <bits/stdc++.h>   using namespace std;   long long a00, a01, a10, a11;   char *s;   bool isSquare(long long x, long long &res) {     long long t = sqrt(x);     for (long long i = max(t - 10, 1LL); i <= t + 10; i++) {       if (i * i == x) {         res = i;         return true;       }     }     return false;   }   bool getS(long long n0, long long n1, long long n) {     s = new char[n + 1];     long long A01 = a01, A10 = a10;     for (long long i = 0; i < n; i++) {       if (A01 - n1 >= 0) {         s[i] =  0 ;         n0 -= 1;         A01 -= n1;       } else if (A10 - n0 >= 0) {         s[i] =  1 ;         n1 -= 1;         A10 -= n0;       } else         return false;     }     s[n] =   0 ;     if (n0 != 0 || n1 != 0 || A01 != 0 || A10 != 0) return false;     return true;   }   bool solve() {     long long t;     if (!isSquare(1 + 8 * a00, t)) return false;     vector<long long> n0;     n0.push_back((1 + t) / 2);     n0.push_back((1 - t) / 2);     if (!isSquare(1 + 8 * a11, t)) return false;     vector<long long> n1;     n1.push_back((1 + t) / 2);     n1.push_back((1 - t) / 2);     for (auto i : n0)       for (auto j : n1) {         long long n = i + j;         if (i < 0 || j < 0 || n <= 0) continue;         if (!getS(i, j, n)) continue;         return true;       }     return false;   }   int main() {     while (cin >> a00 >> a01 >> a10 >> a11) {       bool can = solve();       printf( %s n , can ? s :  Impossible );     }     return 0;   }   