#include <bits/stdc++.h>
using namespace std;
void fail() {
  cout << "Impossible\n";
  exit(0);
}
signed main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  int64_t a[2][2];
  cin >> a[0][0] >> a[0][1] >> a[1][0] >> a[1][1];
  int64_t z = -1, o = -1;
  const int64_t maxn = 1e6;
  for (int64_t i = 0; i <= maxn; i++) {
    if (i * (i - 1) / 2 == a[0][0]) z = i;
    if (i * (i - 1) / 2 == a[1][1]) o = i;
  }
  if (z == -1 || o == -1) fail();
  int64_t O = o, Z = z;
  int64_t AA[2][2];
  AA[0][0] = a[0][0];
  AA[0][1] = a[0][1];
  AA[1][0] = a[1][0];
  AA[1][1] = a[1][1];
  for (int64_t A = 0; A <= (a[0][0] == 0); A++)
    for (int64_t B = 0; B <= (a[1][1] == 0); B++) {
      int64_t a[2][2] = {{AA[0][0], AA[0][1]}, {AA[1][0], AA[1][1]}};
      int64_t z = Z - A;
      int64_t o = O - B;
      int64_t n = o + z;
      if (n > maxn || n == 0) continue;
      string s;
      for (int64_t i = 0; i < n; i++) {
        if (o <= a[0][1] && z > 0) {
          a[0][1] -= o;
          z--;
          s += "0";
        } else {
          a[1][0] -= z;
          o--;
          s += "1";
        }
      }
      if (a[0][1] == 0 && a[1][0] == 0 && o == 0 && z == 0) {
        cout << s << "\n";
        return 0;
      }
    }
  fail();
  return 0;
}

### Prompt

Please create a solution in Cpp to the following problem:

For each string s consisting of characters '0' and '1' one can define four integers a00, a01, a10 and a11, where axy is the number of subsequences of length 2 of the string s equal to the sequence {x, y}. 

In these problem you are given four integers a00, a01, a10, a11 and have to find any non-empty string s that matches them, or determine that there is no such string. One can prove that if at least one answer exists, there exists an answer of length no more than 1 000 000.

Input

The only line of the input contains four non-negative integers a00, a01, a10 and a11. Each of them doesn't exceed 109.

Output

If there exists a non-empty string that matches four integers from the input, print it in the only line of the output. Otherwise, print "Impossible". The length of your answer must not exceed 1 000 000.

Examples

Input

1 2 3 4


Output

Impossible


Input

1 2 2 1


Output

0110

### Response

```cpp
#include <bits/stdc++.h>
using namespace std;
void fail() {
  cout << "Impossible\n";
  exit(0);
}
signed main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  int64_t a[2][2];
  cin >> a[0][0] >> a[0][1] >> a[1][0] >> a[1][1];
  int64_t z = -1, o = -1;
  const int64_t maxn = 1e6;
  for (int64_t i = 0; i <= maxn; i++) {
    if (i * (i - 1) / 2 == a[0][0]) z = i;
    if (i * (i - 1) / 2 == a[1][1]) o = i;
  }
  if (z == -1 || o == -1) fail();
  int64_t O = o, Z = z;
  int64_t AA[2][2];
  AA[0][0] = a[0][0];
  AA[0][1] = a[0][1];
  AA[1][0] = a[1][0];
  AA[1][1] = a[1][1];
  for (int64_t A = 0; A <= (a[0][0] == 0); A++)
    for (int64_t B = 0; B <= (a[1][1] == 0); B++) {
      int64_t a[2][2] = {{AA[0][0], AA[0][1]}, {AA[1][0], AA[1][1]}};
      int64_t z = Z - A;
      int64_t o = O - B;
      int64_t n = o + z;
      if (n > maxn || n == 0) continue;
      string s;
      for (int64_t i = 0; i < n; i++) {
        if (o <= a[0][1] && z > 0) {
          a[0][1] -= o;
          z--;
          s += "0";
        } else {
          a[1][0] -= z;
          o--;
          s += "1";
        }
      }
      if (a[0][1] == 0 && a[1][0] == 0 && o == 0 && z == 0) {
        cout << s << "\n";
        return 0;
      }
    }
  fail();
  return 0;
}

```