#include <bits/stdc++.h>
#define clr(x) memset(x,0,sizeof x)
#define For(i,a,b) for (int i=(a);i<=(b);i++)
#define Fod(i,b,a) for (int i=(b);i>=(a);i--)
#define pb(x) push_back(x)
#define mp(x,y) make_pair(x,y)
#define fi first
#define se second
#define outval(x) cerr<<#x" = "<<x<<endl
#define outtag(x) cerr<<"-----------------"#x"-----------------\n"
#define outarr(a,L,R) cerr<<#a"["<<L<<".."<<R<<"] = ";\
                    For(_x,L,R) cerr<<a[_x]<<" ";cerr<<endl;
using namespace std;
typedef long long LL;
typedef unsigned long long ULL;
typedef pair <int,int> pii;
LL read(){
    LL x=0,f=0;
    char ch=getchar();
    while (!isdigit(ch))
        f=ch=='-',ch=getchar();
    while (isdigit(ch))
        x=(x<<1)+(x<<3)+(ch^48),ch=getchar();
    return f?-x:x;
}
const int N=22,M=1<<21;
int n,k;
char s[M];
int dp[N][M],f0[M],f1[M];
int head=0,tail=0;
int Log[1<<N];
int main(){
	n=read(),k=read();
	For(i,2,(1<<N)-1)
		Log[i]=Log[i>>1]+1;
	For(i,0,n){
		scanf("%s",s);
		For(j,0,(1<<i)-1){
			dp[0][j+(1<<i)]=s[j]-'0';
			f0[j+(1<<i)]=f1[j+(1<<i)]=-1;
			For(t,0,i-1)
				if (~j>>t&1){
					f0[j+(1<<i)]=t;
					break;
				}
			For(t,0,i-1)
				if (j>>t&1){
					f1[j+(1<<i)]=t;
					break;
				}
		}
	}
	int ansl=-1,ans=0;
	For(ls,0,n)
		For(s,0,(1<<ls)-1)
			Fod(lt,n-ls,0){	
				int ad=1<<(ls+lt);
				if (lt==0){
					if (dp[ls][s+ad]>=k)
						if (ls>ansl||(ls==ansl&&s<ans))
							ansl=ls,ans=s;
				}
				else {
					For(t,0,(1<<lt)-1){
						int v=dp[ls][(s<<lt|t)+ad];
						if (!v)
							continue;
						dp[ls][s+(1<<ls)]+=v;
						int F0=f0[t+(1<<lt)],F1=f1[t+(1<<lt)];
						if (~F0)
							dp[ls+1][((s|0<<ls)<<(lt-F0-1)|t>>(F0+1))+(1<<(ls+lt-F0))]+=v;
						if (~F1)
							dp[ls+1][((s|1<<ls)<<(lt-F1-1)|t>>(F1+1))+(1<<(ls+lt-F1))]+=v;
					}
				}
			}
	Fod(i,ansl-1,0)
		putchar('0'+(ans>>i&1));
	return 0;
}