#include <bits/stdc++.h>
using namespace std;
long long pow(long long a, long long b, long long p) {
  long long sum = 1;
  for (a %= p; b; a = a * a % p, b >>= 1)
    if (b & 1) sum = sum * a % p;
  return sum;
}
long long phi(long long n) {
  long long i, re = n;
  for (i = 2; i * i <= n; i++)
    if (n % i == 0) {
      re = re / i * (i - 1);
      while (n % i == 0) n /= i;
    }
  if (n > 1) re = re / n * (n - 1);
  return re % 1000000007;
}
void exgcd(long long a, long long b, long long &x, long long &y) {
  if (!b) {
    x = 1;
    y = 0;
    return;
  }
  exgcd(b, a % b, y, x);
  y -= x * (a / b);
}
long long gcd(long long a, long long b) { return b == 0 ? a : gcd(b, a % b); }
long long sou(long long x) {
  x = 8 * x + 1;
  double y = x;
  long long z;
  z = (long long)sqrt(y);
  if (z * z == x) {
    z -= 1;
    if (z % 2 == 0)
      return z / 2;
    else
      return -1;
  }
  return -1;
}
int main() {
  long long a00, a01, a10, a11, i, m, n;
  n = 0;
  scanf("%I64d%I64d%I64d%I64d", &a00, &a01, &a10, &a11);
  n += a00 + a01 + a10 + a11;
  a00 = sou(a00);
  a11 = sou(a11);
  if (a00 == -1 || a11 == -1 || sou(n) == -1) {
    printf("Impossible\n");
    return 0;
  }
  if (a01 || a10) {
    a00++;
    a11++;
  } else {
    if (!a00 && !a11) {
      printf("0\n");
      return 0;
    }
    if (a00 == 0) {
      for (i = 0; i <= a11; i++) printf("1");
      printf("\n");
      return 0;
    }
    if (a11 == 0) {
      for (i = 0; i <= a00; i++) printf("0");
      printf("\n");
      return 0;
    }
    printf("Impossible\n");
    return 0;
  }
  m = 0;
  for (int j = 0; j < a00 + a11; j++) m += j;
  if (m != n) {
    printf("Impossible\n");
  } else {
    for (i = 0; i < a01 / a11; i++) printf("0");
    a00 -= a01 / a11;
    a01 = a01 % a11;
    for (i = 0; i < a11 - a01; i++) printf("1");
    if (a01) printf("0"), a00--;
    for (i = 0; i < a01; i++) printf("1");
    for (i = 0; i < a00; i++) printf("0");
    printf("\n");
  }
}
