#include <bits/stdc++.h>
const long long INF = 4e18L + 1;
const int IINF = 2e9 + 1;
const int limit = 1048576;
using namespace std;
bool attempt(long long c0, long long c1, long long a01, long long a10,
             string& ans) {
  ans.resize(0);
  if (c0 == -1 or c1 == -1 or a10 + a01 != c0 * c1 or (c0 == 0 and c1 == 0)) {
    return false;
  }
  while (c0 or c1) {
    if (a01 >= c0 and c1) {
      ans.push_back('1');
      c1--;
      a01 -= c0;
    } else {
      ans.push_back('0');
      c0--;
      a10 -= c1;
    }
  }
  reverse((ans).begin(), (ans).end());
  return true;
}
int main() {
  ios_base::sync_with_stdio(0);
  long long a00, a01, a10, a11;
  cin >> a00 >> a01 >> a10 >> a11;
  long long c0 = -1, c1 = -1;
  for (long long i = 1; (i * (i - 1)) / 2 <= 1e9 + 1; i++) {
    if ((i * (i - 1)) / 2 == a00) {
      c0 = i;
    }
    if ((i * (i - 1)) / 2 == a11) {
      c1 = i;
    }
  }
  string res, cand;
  if (attempt(c0, c1, a01, a10, cand)) {
    cout << cand << "\n";
    return 0;
  }
  if (c0 == 1 and attempt(0, c1, a01, a10, cand)) {
    cout << cand << "\n";
    return 0;
  }
  if (c1 == 1 and attempt(c0, 0, a01, a10, cand)) {
    cout << cand << "\n";
    return 0;
  }
  cout << "Impossible\n";
  return 0;
}
