#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:400000000")
using namespace std;
int a[4];
map<int, vector<int> > M;
void solve(int c1, int c2, int c12, int c21, char A, char B) {
  if ((long long)c1 * c2 == c12 && c21 == 0) {
    for (int i = 0; i < c1; ++i) printf("%c", A);
    for (int i = 0; i < c2; ++i) printf("%c", B);
    printf("\n");
    exit(0);
  }
  for (int i = 0; i < c1; ++i) {
    long long p12 = (long long)i * c2;
    if (p12 <= c12) {
      if (c12 - p12 > c2) continue;
      int k = c2 - (c12 - p12);
      if ((long long)c2 * (c1 - i - 1) + k == c21) {
        for (int j = 0; j < i; ++j) printf("%c", A);
        for (int j = 0; j < k; ++j) printf("%c", B);
        printf("%c", A);
        for (int j = 0; j < c2 - k; ++j) printf("%c", B);
        for (int j = 0; j < c1 - i - 1; ++j) printf("%c", A);
        printf("\n");
        exit(0);
      }
    }
  }
}
int main() {
  for (int i = 0;; ++i) {
    long long p = (long long)i * (i - 1) / 2;
    if (p <= (int)1e9)
      M[p].push_back(i);
    else
      break;
  }
  int s = 0;
  for (int i = 0; i < 4; ++i) {
    scanf("%d", &a[i]);
    s += a[i];
  }
  if (s == 0) {
    printf("1\n");
    return 0;
  }
  if (!M.count(a[0]) || !M.count(a[3])) {
    printf("Impossible\n");
    return 0;
  }
  vector<int> A = M[a[0]];
  vector<int> B = M[a[3]];
  for (int i = 0; i < A.size(); ++i) {
    for (int j = 0; j < B.size(); ++j) {
      solve(A[i], B[j], a[1], a[2], '0', '1');
      solve(B[j], A[i], a[2], a[1], '1', '0');
    }
  }
  printf("Impossible\n");
  return 0;
}

### Prompt

In Cpp, your task is to solve 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>
#pragma comment(linker, "/STACK:400000000")
using namespace std;
int a[4];
map<int, vector<int> > M;
void solve(int c1, int c2, int c12, int c21, char A, char B) {
  if ((long long)c1 * c2 == c12 && c21 == 0) {
    for (int i = 0; i < c1; ++i) printf("%c", A);
    for (int i = 0; i < c2; ++i) printf("%c", B);
    printf("\n");
    exit(0);
  }
  for (int i = 0; i < c1; ++i) {
    long long p12 = (long long)i * c2;
    if (p12 <= c12) {
      if (c12 - p12 > c2) continue;
      int k = c2 - (c12 - p12);
      if ((long long)c2 * (c1 - i - 1) + k == c21) {
        for (int j = 0; j < i; ++j) printf("%c", A);
        for (int j = 0; j < k; ++j) printf("%c", B);
        printf("%c", A);
        for (int j = 0; j < c2 - k; ++j) printf("%c", B);
        for (int j = 0; j < c1 - i - 1; ++j) printf("%c", A);
        printf("\n");
        exit(0);
      }
    }
  }
}
int main() {
  for (int i = 0;; ++i) {
    long long p = (long long)i * (i - 1) / 2;
    if (p <= (int)1e9)
      M[p].push_back(i);
    else
      break;
  }
  int s = 0;
  for (int i = 0; i < 4; ++i) {
    scanf("%d", &a[i]);
    s += a[i];
  }
  if (s == 0) {
    printf("1\n");
    return 0;
  }
  if (!M.count(a[0]) || !M.count(a[3])) {
    printf("Impossible\n");
    return 0;
  }
  vector<int> A = M[a[0]];
  vector<int> B = M[a[3]];
  for (int i = 0; i < A.size(); ++i) {
    for (int j = 0; j < B.size(); ++j) {
      solve(A[i], B[j], a[1], a[2], '0', '1');
      solve(B[j], A[i], a[2], a[1], '1', '0');
    }
  }
  printf("Impossible\n");
  return 0;
}

```