#include <bits/stdc++.h>
using namespace std;
long long a[5];
short int ans[1000005];
bool check(long long n);
int main(void) {
  while (scanf("%I64d", &a[0]) != EOF) {
    int i, j;
    for (i = 1; i < 4; i++) {
      scanf("%I64d", &a[i]);
    }
    long long x1 = 1 + 8 * a[0];
    long long x2 = 1 + 8 * a[3];
    bool fla1 = check(x1);
    bool fla2 = check(x2);
    if (!fla1 || !fla2) {
      printf("Impossible\n");
    } else {
      if (a[0] == 0 && a[1] == 0 && a[2] == 0 && a[3] == 0) {
        printf("1\n");
      } else if (a[0] != 0 && a[1] == 0 & a[2] == 0 && a[3] == 0) {
        long long cnt = 1 + sqrt(1 + 8 * a[0]);
        cnt /= 2;
        for (i = 0; i < cnt; i++) printf("0");
        printf("\n");
      } else if (a[0] == 0 && a[1] == 0 && a[2] == 0 && a[3] != 0) {
        long long cnt = sqrt(1 + 8 * a[3]) + 1;
        cnt /= 2;
        for (i = 0; i < cnt; i++) printf("1");
        printf("\n");
      } else {
        x1 = 1 + sqrt(x1);
        x1 /= 2;
        x2 = 1 + sqrt(x2);
        x2 /= 2;
        fill(ans, ans + 1000005, 1);
        long long sum1 = x1 * x2;
        long long sum2 = 0;
        if (sum1 != a[1] + a[2])
          printf("Impossible\n");
        else {
          long long ac = a[2];
          long long ak = ac / x2;
          long long tt = ac % x2;
          long long nn = x1 + x2;
          if (tt) ak++;
          for (i = 0; i < (x1 - ak); i++) {
            printf("0");
          }
          if (tt == 0) {
            for (i = 0; i < x2; i++) printf("1");
          } else {
            for (i = 0; i < x2; i++) {
              if (i == tt)
                printf("0");
              else
                printf("1");
            }
            printf("1");
          }
          if (tt) ak--;
          for (i = 0; i < ak; i++) {
            printf("0");
          }
          printf("\n");
        }
      }
    }
  }
  return 0;
}
bool check(long long n) {
  long long ap = sqrt(1.0 * n);
  if (ap * ap == n) return true;
  return false;
}
