func_code_string: #include <bits/stdc++.h>   using namespace std;   long long two(int x) { return 1LL << x; }   int get(long long p, int i) { return (p >> (i - 1)) & 1; }   long long count(int n, int k, long long pre) {     long long ret = 0;     bool rev = true, inv = true;     for (int i = 1; i + i <= n; i++) {       if (i <= k && n - i + 1 <= k && get(pre, i) != get(pre, n - i + 1))         rev = false;       if (rev)         if (n - 2 * i == 0)           ret += two(max(0, i - k));         else if (n - 2 * i == 1)           ret += two(max(0, i + 1 - k));         else if ((i >= k || !get(pre, i + 1)) &&                  (n - i - 1 >= k || get(pre, n - i)))           ret += two(max(0, n - i - 1 - k - (k <= i)));       if (i <= k && n - i + 1 <= k && get(pre, i) == get(pre, n - i + 1))         inv = false;       if (inv)         if (n - 2 * i == 0)           ret += two(max(0, i - k));         else if (n - 2 * i == 1) {           if (i >= k || !get(pre, i + 1)) ret += two(max(0, i - k));         } else if ((i >= k || !get(pre, i + 1)) &&                    (n - i - 1 >= k || !get(pre, n - i)))           ret += two(max(0, n - i - 1 - k - (k <= i)));     }     return ret;   }   int main() {     int n;     long long m;     cin >> n >> m;     if (m >= count(n, 1, 0LL)) {       cout << -1 << endl;       return 0;     }     long long pre = 0;     for (int i = 2; i <= n; i++) {       long long tmp = count(n, i, pre);       if (m >= tmp) {         m -= tmp;         pre += two(i - 1);       }     }     for (int i = 1; i <= n; i++) cout << get(pre, i);     cout << endl;   }   