#include <bits/stdc++.h>
using namespace std;
const long long mod = 1000000007;
long long powmod(long long a, long long b) {
  long long res = 1;
  a %= mod;
  assert(b >= 0);
  for (; b; b >>= 1) {
    if (b & 1) res = res * a % mod;
    a = a * a % mod;
  }
  return res;
}
template <typename N>
N gcd(N a, N b) {
  return b ? gcd(b, a % b) : a;
}
void precision(long long pr) {
  cout.precision(pr);
  cout << fixed;
}
const int N = 1e5 + 21;
long long dp[N + 21];
vector<long long> ans;
int main() {
  long long i, j, k, a1, a2, a3, a4, a, b, sach = 0, cnt = 0;
  dp[1] = 0;
  dp[0] = -1;
  for (i = 2; i <= N; i++) {
    dp[i] = (i * (i - 1)) / 2;
  }
  cin >> a1 >> a >> b >> a4;
  if (a1 == 0 && a == 0 && b == 0 && a4 == 0)
    cout << "0\n";
  else {
    if (!binary_search(dp, dp + N, a1) || (!binary_search(dp, dp + N, a4)))
      sach = 1;
    else {
      long long x = lower_bound(dp, dp + N, a1) - dp;
      long long y = lower_bound(dp, dp + N, a4) - dp;
      if (a1 == 0 && a == 0 && b == 0)
        while (y > 0) {
          ans.push_back(1);
          y--;
        }
      else if (a == 0 && b == 0 && a4 == 0)
        while (x > 0) {
          ans.push_back(0);
          x--;
        }
      else {
        if (x != 0)
          if ((a + b) % x != 0)
            sach = 1;
          else {
            if (a1 == 0 && a4 == 0)
              if (a != 0 && b != 0 || (a > 1 || b > 1)) {
                sach = 1;
                goto xy;
              }
            long long z = x;
            while (b > 0) {
              if (b >= z) {
                ans.push_back(1);
                b = b - z;
                a = a - cnt;
                y = y - 1;
              } else {
                z--;
                cnt++;
                ans.push_back(0);
              }
              if (b <= 0 || z <= 0) break;
            }
            if (b == 0) {
              while (z > 0) {
                ans.push_back(0);
                z--;
              }
            }
            if (x != 0)
              if ((a % x != 0) || a < 0) {
                sach = 1;
                goto xy;
              }
            while (y > 0) {
              ans.push_back(1);
              a -= x;
              y--;
            }
            if (a != 0) sach = 1;
          }
      }
    }
  xy:
    if (sach)
      cout << "Impossible\n";
    else {
      for (i = 0; i < ans.size(); i++) cout << ans[i];
      cout << '\n';
    }
  }
}
