#include <bits/stdc++.h>
using namespace std;
long long f[55][2][2], ans[55], n, k;
bool flag[55][2][2];
long long getf(long long l, long long r, bool f0, bool f1) {
  long long i, j;
  if (l > r) return 1;
  if (flag[l][f0][f1]) return f[l][f0][f1];
  f[l][f0][f1] = 0;
  for (i = 0; i <= 1; i++)
    for (j = 0; j <= 1; j++) {
      if (ans[l] != -1 && ans[l] != i) continue;
      if (ans[r] != -1 && ans[r] != j) continue;
      if (!f0 && i && !j) continue;
      if (!f1 && i && j) continue;
      if (l == r && i != j) continue;
      f[l][f0][f1] += getf(l + 1, r - 1, f0 || (i != j), f1 || (i == j));
    }
  flag[l][f0][f1] = true;
  return f[l][f0][f1];
}
int main() {
  long long i, tem;
  scanf("%I64d%I64d", &n, &k);
  k++;
  for (i = 0; i < n; i++) ans[i] = -1;
  for (i = 0; i < n; i++) {
    ans[i] = 0;
    memset(flag, 0, sizeof(flag));
    tem = getf(0, n - 1, 0, 0);
    if (tem < k) {
      if (i == 0) {
        ans[i] = -1;
        break;
      } else
        ans[i] = 1, k -= tem;
    }
  }
  if (ans[0] == -1)
    printf("-1\n");
  else {
    for (i = 0; i < n; i++) printf("%I64d", ans[i]);
    printf("\n");
  }
  return 0;
}
