#include <iostream>
#include <queue>

const int N = (1 << 21) * 21 + 7;

int hghbit[N];
int endbit(int x, int b) {
	return x ^ x >> b << b;
}
int dethghbit(int x) {
	return x ^ 1 << hghbit[x];
}

int n, k;
int cnt[N];
void addedge(int u, int v) {
	cnt[v] += cnt[u];
}

int main() {
	hghbit[0] = -1;
	for (int i = 1; i < 1 << 22; ++i)
		hghbit[i] = std::max(hghbit[i >> 1] + 1, i & 1 ? 0 : -1);

	scanf("%d%d", &n, &k);
	static char s[1 << 22 | 7];
	scanf("%s", s);
	for (int i = 1; i <= n; ++i) {
		scanf("%s", s);
		for (int j = 0; j < 1 << i; ++j)
			cnt[(1 << i | j) * (n + 1) + i] += s[j] ^ 48;
	}

	for (int i = n; ~i; --i)
		for (int j = 1 << i, k, l; j < 1 << n + 1; ++j) {
			int x = dethghbit(j) >> i, y = endbit(j, i), u, v;
			if (y)
				k = hghbit[y],
				u = x << 1 | 1, v = endbit(y, k),
				l = 1 << hghbit[j] - (i - k) + 1 | u << k | v,
				addedge(j * (n + 1) + i, l * (n + 1) + k);
			if (y ^ (1 << i) - 1)
				k = hghbit[y ^ (1 << i) - 1],
				u = x << 1, v = endbit(y, k),
				l = 1 << hghbit[j] - (i - k) + 1 | u << k | v,
				addedge(j * (n + 1) + i, l * (n + 1) + k);
			if (i)
				l = j >> i, k = 0,
				addedge(j * (n + 1) + i, l * (n + 1) + k);
		}

	int ans = 0, bit = 0;
	for (int i = 2, j; i < 1 << n + 1; ++i)
		if (cnt[i * (n + 1)] >= k && (j = hghbit[i]) > bit) ans = i, bit = j;
	if (ans)
		for (ans ^= 1 << bit; bit; --bit)
			if (ans >> bit - 1) printf("1"), ans ^= 1 << bit - 1;
			else printf("0");
	return 0;
}
### Prompt

Your challenge is to write a CPP solution to the following problem:

You are given a set S of strings consisting of `0` and `1`, and an integer K.

Find the longest string that is a subsequence of K or more different strings in S. If there are multiple strings that satisfy this condition, find the lexicographically smallest such string.

Here, S is given in the format below:

* The data directly given to you is an integer N, and N+1 strings X_0,X_1,...,X_N. For every i (0\leq i\leq N), the length of X_i is 2^i.
* For every pair of two integers (i,j) (0\leq i\leq N,0\leq j\leq 2^i-1), the j-th character of X_i is `1` if and only if the binary representation of j with i digits (possibly with leading zeros) belongs to S. Here, the first and last characters in X_i are called the 0-th and (2^i-1)-th characters, respectively.
* S does not contain a string with length N+1 or more.



Here, a string A is a subsequence of another string B when there exists a sequence of integers t_1 < ... < t_{|A|} such that, for every i (1\leq i\leq |A|), the i-th character of A and the t_i-th character of B is equal.

Constraints

* 0 \leq N \leq 20
* X_i(0\leq i\leq N) is a string of length 2^i consisting of `0` and `1`.
* 1 \leq K \leq |S|
* K is an integer.

Input

Input is given from Standard Input in the following format:


N K
X_0
:
X_N


Output

Print the lexicographically smallest string among the longest strings that are subsequences of K or more different strings in S.

Examples

Input

3 4
1
01
1011
01001110


Output

10


Input

4 6
1
01
1011
10111010
1101110011111101


Output

100


Input

2 5
0
11
1111


Output

### Response

```cpp
#include <iostream>
#include <queue>

const int N = (1 << 21) * 21 + 7;

int hghbit[N];
int endbit(int x, int b) {
	return x ^ x >> b << b;
}
int dethghbit(int x) {
	return x ^ 1 << hghbit[x];
}

int n, k;
int cnt[N];
void addedge(int u, int v) {
	cnt[v] += cnt[u];
}

int main() {
	hghbit[0] = -1;
	for (int i = 1; i < 1 << 22; ++i)
		hghbit[i] = std::max(hghbit[i >> 1] + 1, i & 1 ? 0 : -1);

	scanf("%d%d", &n, &k);
	static char s[1 << 22 | 7];
	scanf("%s", s);
	for (int i = 1; i <= n; ++i) {
		scanf("%s", s);
		for (int j = 0; j < 1 << i; ++j)
			cnt[(1 << i | j) * (n + 1) + i] += s[j] ^ 48;
	}

	for (int i = n; ~i; --i)
		for (int j = 1 << i, k, l; j < 1 << n + 1; ++j) {
			int x = dethghbit(j) >> i, y = endbit(j, i), u, v;
			if (y)
				k = hghbit[y],
				u = x << 1 | 1, v = endbit(y, k),
				l = 1 << hghbit[j] - (i - k) + 1 | u << k | v,
				addedge(j * (n + 1) + i, l * (n + 1) + k);
			if (y ^ (1 << i) - 1)
				k = hghbit[y ^ (1 << i) - 1],
				u = x << 1, v = endbit(y, k),
				l = 1 << hghbit[j] - (i - k) + 1 | u << k | v,
				addedge(j * (n + 1) + i, l * (n + 1) + k);
			if (i)
				l = j >> i, k = 0,
				addedge(j * (n + 1) + i, l * (n + 1) + k);
		}

	int ans = 0, bit = 0;
	for (int i = 2, j; i < 1 << n + 1; ++i)
		if (cnt[i * (n + 1)] >= k && (j = hghbit[i]) > bit) ans = i, bit = j;
	if (ans)
		for (ans ^= 1 << bit; bit; --bit)
			if (ans >> bit - 1) printf("1"), ans ^= 1 << bit - 1;
			else printf("0");
	return 0;
}
```