#include <bits/stdc++.h>
using namespace std;
long long int check(long long int x) {
  if (x == 0) return 1;
  for (long long int i = 1;; i++) {
    if ((i * (i - 1)) / 2 > x) return -1;
    if ((i * (i - 1)) / 2 == x) return i;
  }
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(NULL);
  cout.tie(NULL);
  long long int a, b, c, d;
  cin >> a >> b >> c >> d;
  long long int oc = check(d);
  long long int zc = check(a);
  if (a == 0 && b == 0 && c == 0 && d == 0) {
    cout << 0 << '\n';
    return 0;
  }
  if (oc == -1 or zc == -1) {
    cout << "Impossible" << '\n';
    return 0;
  }
  if (d == 0) {
    if (b != 0 or c != 0) {
    } else {
      for (int i = 0; i < zc; i++) cout << 0;
      cout << '\n';
      return 0;
    }
  }
  if (a == 0) {
    if (b != 0 or c != 0) {
    } else {
      for (int i = 0; i < oc; i++) cout << 1;
      cout << '\n';
      return 0;
    }
  }
  if ((b + c) % zc != 0 or (b + c) % oc != 0)
    return cout << "Impossible" << '\n', 0;
  string ans = "";
  long long int zq = zc * oc;
  long long int oq = 0;
  long long int zf = zc;
  while (1) {
    if (zq - oc > b) {
      zq -= oc;
      oq += oc;
      zf--;
    } else
      break;
    if (zc < 0) {
      cout << "Impossible" << '\n';
      return 0;
    }
  }
  for (int i = 0; i < zf; i++) ans += '0';
  for (int i = 0; i < oc; i++) ans += '1';
  for (int i = 0; i < zc - zf; i++) ans += '0';
  for (int i = zf - 1; i >= 0; i--) {
    for (int j = i; j < ans.length() - (zc - i); j++) {
      if (zq == b && oq == c) goto label;
      swap(ans[j], ans[j + 1]);
      oq++;
      zq--;
    }
    if (zq < b) break;
  }
label:
  if (zq == b && oq == c)
    cout << ans << '\n';
  else
    cout << "Impossible" << '\n';
}
