#include <bits/stdc++.h>
const int MAX_N = (int)2e5 + 123;
const double eps = 1e-6;
const int inf = (int)1e9 + 123;
using namespace std;
int a[2][2];
bool check(int zero, int one) {
  int len = zero + one;
  if (a[1][0] != 1ll * len * (len - 1) / 2 - a[0][0] - a[1][1] - a[0][1])
    return 0;
  if (a[0][1] > 1ll * zero * one) return 0;
  if (!one) {
    if (a[0][1] == 0 && a[1][0] == 0 && a[1][1] == 0 &&
        a[0][0] == 1ll * zero * (zero - 1) / 2) {
      for (int i = 0; i < zero; i++) cout << "0";
      exit(0);
    }
    return 0;
  }
  long long all = 1ll * zero * one;
  int prev = zero;
  while (all - one >= a[0][1]) {
    prev--;
    all -= one;
  }
  int dif = all - a[0][1];
  string second = "";
  for (int i = 1; i < prev; i++) second += '0';
  for (int i = 1; i <= dif; i++) second += '1';
  if (prev > 0) second += '0';
  for (int i = dif + 1; i <= one; i++) second += '1';
  for (int i = 1; i <= zero - prev; i++) second += '0';
  cout << second;
  exit(0);
}
int main() {
  for (int i = 0; i < 2; i++)
    for (int j = 0; j < 2; j++) cin >> a[i][j];
  vector<int> z, o;
  for (int len = 0; len <= (int)1e6; len++) {
    if (1ll * len * (len - 1) / 2 == a[0][0]) z.push_back(len);
    if (1ll * len * (len - 1) / 2 == a[1][1]) o.push_back(len);
  }
  for (auto i : z)
    for (auto j : o)
      if (i + j > 0 && check(i, j)) {
      }
  cout << "Impossible";
  return 0;
}
