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

Solution (in CPP):

Solution:
#include<bits/stdc++.h>
#define ll long long
#define pb push_back
#define N (1<<21)+10
#define mr emplace_pair
using namespace std;
template <typename T> void read(T &x){
	x=0;char ch=getchar();int fh=1;
	while (ch<'0'||ch>'9'){if (ch=='-')fh=-1;ch=getchar();}
	while (ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar();
	x*=fh;
}
int a[N],n,K,dp[N][22],ne[N][2],no[24],ho[N][22],an[N];
void di(int x,int y){if (y>1)di(x/2,y-1);cout<<x%2;}
int main(){
	read(n);read(K);
	for (int i=0;i<=n;i++){
		for (int j=0;j<(1<<i);j++){
			char ch=getchar();
			while (ch!='0'&&ch!='1')ch=getchar();
			if (ch=='1'){a[(1<<i)+j]=1;dp[(1<<i)+j][0]=1;}
		}
	}
	for (int i=0;i<(1<<(n+1));i++){
		for (int j=0,k=i;j<=n;j++,k>>=1)no[j]=k&1;
		for (int j=0,k=0;j<=n;k+=no[j]*(1<<j),j++)ho[i][j]=k;
		ne[i][0]=ne[i][1]=-1;
		for (int k=n;k>=0;k--){
			if (no[k]){
				for (int p=0,s=0;p<k;s+=no[p]*(1<<p),p++)ne[i][no[p]]=s+(1<<p);
				break;
			}
		}
	}
	for (int i=0;i<=n;i++){
		for (int j=0;j<(1<<(n+1));j++){
			if (dp[j][i]){
				if (ne[j>>i][0]!=-1)dp[(ne[j>>i][0]<<(i+1))+ho[j][i]*2][i+1]=dp[(ne[j>>i][0]<<(i+1))+ho[j][i]*2][i+1]+dp[j][i];
				if (ne[j>>i][1]!=-1)dp[(ne[j>>i][1]<<(i+1))+ho[j][i]*2+1][i+1]=dp[(ne[j>>i][1]<<(i+1))+ho[j][i]*2+1][i+1]+dp[j][i];
				an[ho[j][i]+(1<<i)]+=dp[j][i];
			}
		}
	}
	for (int i=n;i>=1;i--)
		for (int j=0;j<(1<<i);j++)
			if (an[(1<<i)+j]>=K){di(ho[j][i],i);return 0;}
	return 0;
}