#include <bits/stdc++.h>
std::string build(long long zeroes, long long ones, long long a[2][2]) {
  if (zeroes * (zeroes - 1) != 2 * a[0][0] ||
      ones * (ones - 1) != 2 * a[1][1]) {
    return "";
  }
  std::string str(ones + zeroes, '0');
  for (int i = zeroes; i < ones + zeroes; ++i) {
    str[i] = '1';
  }
  long long current_01 = ones * zeroes;
  long long current_10 = 0;
  if (current_01 + current_10 != a[0][1] + a[1][0]) {
    return "";
  }
  int left = 0;
  for (int current = zeroes; current < ones + zeroes; ++current) {
    if (current_01 - zeroes >= a[0][1]) {
      std::swap(str[left], str[current]);
      current_01 -= zeroes;
      current_10 += zeroes;
      left++;
    } else {
      for (int j = current - 1; current_01 > a[0][1]; j--) {
        std::swap(str[j + 1], str[j]);
        current_01--;
        current_10++;
      }
      break;
    }
  }
  if (ones + zeroes == 0 || current_01 != a[0][1] || current_10 != a[1][0]) {
    return "";
  } else {
    return str;
  }
}
int main() {
  long long a[2][2];
  for (int i = 0; i < 2; ++i) {
    for (int j = 0; j < 2; ++j) {
      std::cin >> a[i][j];
    }
  }
  long long zeroes = 0, ones = 0;
  while (zeroes * (zeroes - 1) / 2 < a[0][0]) {
    zeroes++;
  }
  while (ones * (ones - 1) / 2 < a[1][1]) {
    ones++;
  }
  for (int i = zeroes; i <= std::max(1LL, zeroes); ++i) {
    for (int j = ones; j <= std::max(1LL, ones); ++j) {
      std::string str = build(i, j, a);
      if (!str.empty()) {
        std::cout << str << std::endl;
        return 0;
      }
    }
  }
  std::cout << "Impossible" << std::endl;
  return 0;
}
