#include <bits/stdc++.h>
using namespace std;
int a00, a01, a10, a11;
long long q0, q1;
char s[1000005];
int main() {
  scanf("%d %d %d %d", &a00, &a01, &a10, &a11);
  for (q0 = 0; q0 * (q0 - 1) / 2 < a00; q0++)
    ;
  if (q0 * (q0 - 1) / 2 != a00) {
    puts("Impossible");
    return 0;
  }
  for (q1 = 0; q1 * (q1 - 1) / 2 < a11; q1++)
    ;
  if (q1 * (q1 - 1) / 2 != a11) {
    puts("Impossible");
    return 0;
  }
  if (q0 + q1 > 1000000) {
    puts("Impossible");
    return 0;
  }
  if (a00 + a01 + a10 + a11 == 0) {
    puts("0");
    return 0;
  }
  if (a00 == 0 && a11 == 0) {
    if (a01 == 1 && a10 == 0)
      puts("01");
    else if (a01 == 0 && a10 == 1)
      puts("10");
    else
      puts("Impossible");
    return 0;
  }
  if (a00 == 0 && a01 + a10 > 0) q0 = 1;
  if (a11 == 0 && a01 + a10 > 0) q1 = 1;
  if (q0 * q1 != a01 + a10) {
    puts("Impossible");
    return 0;
  }
  for (int i = 0; i < q0; i++) s[i] = '0';
  for (int i = 0; i < q1; i++) s[q0 + i] = '1';
  s[q0 + q1] = 0;
  long long c01 = q0 * q1, c10 = 0;
  for (int i = q0 - 1; i >= 0 && c01 > a01; i--) {
    int x = min(q1, c01 - a01);
    swap(s[i], s[i + x]);
    c01 -= x;
    c10 += x;
  }
  if (c01 != a01 || c10 != a10)
    puts("Impossible");
  else
    puts(s);
}
