#include <bits/stdc++.h>
using namespace std;
int main() {
  long long a00, a01, a10, a11;
  scanf("%lld %lld %lld %lld", &a00, &a01, &a10, &a11);
  if (!a00 && !a01 && !a10 && !a11) {
    printf("1\n");
    return 0;
  }
  int l = 0, r = 1000010;
  int v[1000010] = {};
  while (l != r) {
    long long m = (l + r) / 2;
    if (m * (m - 1) / 2 >= a00)
      r = m;
    else
      l = m + 1;
  }
  long long n = l;
  if (n * (n - 1) / 2 != a00) {
    printf("Impossible\n");
    return 0;
  }
  l = 0, r = 1000010;
  while (l != r) {
    long long m = (l + r) / 2;
    if (m * (m - 1) / 2 >= a11)
      r = m;
    else
      l = m + 1;
  }
  long long m = l;
  if (m * (m - 1) / 2 != a11) {
    printf("Impossible\n");
    return 0;
  }
  if (m != 0 && n != 0 && m * n != a01 + a10) {
    printf("Impossible\n");
    return 0;
  }
  if (m == 0 && n == 0) {
    if (a10 == 1 && !a01) {
      printf("10\n");
      return 0;
    }
    if (!a10 && a01 == 1) {
      printf("01\n");
      return 0;
    }
    printf("Impossible\n");
    return 0;
  }
  if (m * n != a01 + a10) {
    if (m == 0) m++;
    if (n == 0) n++;
    if (m * n != a01 + a10) {
      printf("Impossible\n");
      return 0;
    }
  }
  while (a01) {
    v[min(n, a01)]++;
    a01 -= min(n, a01);
    m--;
  }
  for (int i = 0; i < m; i++) printf("1");
  for (int i = 1; i <= n; i++) {
    printf("0");
    for (int j = 0; j < v[i]; j++) printf("1");
  }
  printf("\n");
  return 0;
}
