#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;
}
