#include <bits/stdc++.h>
using namespace std;
const long long int mod = 1e9 + 7;
const int N = 1005;
inline long long rd() {
  long long x = 0;
  char c = getchar();
  bool f = false;
  while (!isdigit(c)) {
    if (c == '-') f = true;
    c = getchar();
  }
  while (isdigit(c)) {
    x = (x << 1) + (x << 3) + (c ^ 48);
    c = getchar();
  }
  return f ? -x : x;
}
long long gcd(long long a, long long b) { return b == 0 ? a : gcd(b, a % b); }
long long sqr(long long x) { return x * x; }
int a00, a01, a10, a11;
int main() {
  scanf("%d", &a00);
  scanf("%d", &a01);
  scanf("%d", &a10);
  scanf("%d", &a11);
  int k = 1, r = 1;
  while (k * (k - 1) / 2 < a00) k++;
  while (r * (r - 1) / 2 < a11) r++;
  int fg = 1;
  if (k * (k - 1) / 2 != a00 || r * (r - 1) / 2 != a11) {
    cout << "Impossible" << endl;
    return 0;
  } else if (a00 == 0 && a11 == 0) {
    if (a01 == 0 && a10 == 0)
      cout << 0 << endl;
    else if (a01 == 0 && a10 == 1)
      cout << "10" << endl;
    else if (a01 == 1 && a10 == 0)
      cout << "01" << endl;
    else
      cout << "Impossible" << endl;
    return 0;
  } else if (a00 == 0) {
    if (a01 == 0 && a10 == 0) {
      while (r--) cout << '1';
    } else if (a01 + a10 == r) {
      while (a10--) cout << '1';
      cout << 0;
      while (a01--) cout << '1';
    } else
      fg = 0;
  } else if (a11 == 0) {
    if (a10 == 0 && a01 == 0) {
      while (k--) cout << '0';
    } else if (a10 + a01 == k) {
      while (a01--) cout << 0;
      cout << 1;
      while (a10--) cout << 0;
    } else
      fg = 0;
  } else {
    if (a01 + a10 == k * r) {
      while (a01) {
        while (r > a01) {
          cout << 1;
          r--;
        }
        cout << 0;
        k--;
        a01 -= r;
      }
      while (r--) cout << 1;
      while (k--) cout << 0;
    } else
      fg = 0;
  }
  if (fg == 0) cout << "Impossible" << endl;
  return 0;
}
