Language: C++

#pragma GCC optimize(3,"Ofast","inline")
#include<bits/stdc++.h>
using namespace std;
#define int long long
inline int read()
{
	int x=0,f=1;char ch=getchar();
	while(!isdigit(ch))
	{
		if(ch=='-') f=-1;
		ch=getchar();
	}
	while(isdigit(ch))
	{
		x=(x<<1)+(x<<3)+ch-'0';
		ch=getchar();
	}
	return x*f;
}
const int N=22;
int ch[2][1<<N],id[N][1<<(N-1)],cnt,a[N][1<<N],siz[N],c[N][1<<N],num[N][1<<N],ans[N],n,K;
char s[1<<(N-1)];
inline void dfs(int d,int s)
{
	if(ans[d]==-1)ans[d]=s;
	for(int p=0;p<=1;p++)
	{
		int tot=0;
		for(int i=0;i<siz[d];i++)
		{
			int v=ch[p][a[d][i]];
			if(v==-1) continue;
			if(num)
			{
				num[d+1][a[d+1][siz[d+1]]=v]=siz[d+1];
				siz[d+1]++;
			}
			tot+=c[d][i];
			c[d+1][num[d+1][v]]+=c[d][i];
		}
		if(tot>=K)dfs(d+1,(s<<1)|p);
		for(int i=0;i<siz[d+1];i++)
		{
			num[d+1][a[d+1][i]]=-1;
			c[d+1][i]=0;
			siz[d+1]=0;
		}
	}
}
signed main(void)
{
	n=read();
	K=read();
	id[0][0]=(cnt++);
	ch[0][id[0][0]]=ch[1][id[0][0]]=-1;
	for(int i=1;i<=20;i++)
	{
		int t=(1<<i),k=(t>>1);
		for(int s=0;s<t;s++)
		{
			id[i][s]=(cnt++);
			int p=(s&k),q=(p?1:0);
			ch[q][id[i][s]]=id[i-1][s^p];
			ch[!q][id[i][s]]=ch[!q][id[i-1][s^p]];
		}
	}
	for(int i=0;i<=n;i++)for(int j=0;j<cnt;j++)num[i][j]=-1;
	for(int i=0;i<=n;i++)
	{
		scanf("%s",s);
		int t=(1<<i);
		for(int j=0;j<t;j++)if(s[j]=='1')
		{
			num[0][a[0][siz[0]]=id[i][j]]=siz[0];
			c[0][num[0][id[i][j]]]++;
			siz[0]++;
		}
		ans[i]=-1;
	}
	dfs(0,0);
	for(int i=n;i>=0;i--)if(ans[i]!=-1)
	{
		for(int j=i-1;j>=0;j--)putchar(((ans[i]>>j)&1)+'0');
		puts("");
		return 0;
	}
	return 0;
}

Compiler output:
/tmp/cclbJ6Wm.o: in function `dfs(long long, long long)':
a.cc:(.text._Z3dfsxx[_Z3dfsxx]+0x5): relocation truncated to fit: R_X86_64_PC32 against symbol `ans' defined in .bss section in /tmp/cclbJ6Wm.o
a.cc:(.text._Z3dfsxx[_Z3dfsxx]+0xf4): relocation truncated to fit: R_X86_64_PC32 against symbol `K' defined in .bss section in /tmp/cclbJ6Wm.o
a.cc:(.text._Z3dfsxx[_Z3dfsxx]+0x186): relocation truncated to fit: R_X86_64_PC32 against symbol `ans' defined in .bss section in /tmp/cclbJ6Wm.o
a.cc:(.text._Z3dfsxx[_Z3dfsxx]+0x2aa): relocation truncated to fit: R_X86_64_PC32 against symbol `K' defined in .bss section in /tmp/cclbJ6Wm.o
a.cc:(.text._Z3dfsxx[_Z3dfsxx]+0x2e6): relocation truncated to fit: R_X86_64_PC32 against symbol `ans' defined in .bss section in /tmp/cclbJ6Wm.o
a.cc:(.text._Z3dfsxx[_Z3dfsxx]+0x401): relocation truncated to fit: R_X86_64_PC32 against symbol `K' defined in .bss section in /tmp/cclbJ6Wm.o
a.cc:(.text._Z3dfsxx[_Z3dfsxx]+0x426): relocation truncated to fit: R_X86_64_PC32 against symbol `ans' defined in .bss section in /tmp/cclbJ6Wm.o
a.cc:(.text._Z3dfsxx[_Z3dfsxx]+0x54d): relocation truncated to fit: R_X86_64_PC32 against symbol `K' defined in .bss section in /tmp/cclbJ6Wm.o
a.cc:(.text._Z3dfsxx[_Z3dfsxx]+0x589): relocation truncated to fit: R_X86_64_PC32 against symbol `ans' defined in .bss section in /tmp/cclbJ6Wm.o
a.cc:(.text._Z3dfsxx[_Z3dfsxx]+0x6c5): relocation truncated to fit: R_X86_64_PC32 against symbol `K' defined in .bss section in /tmp/cclbJ6Wm.o
a.cc:(.text._Z3dfsxx[_Z3dfsxx]+0x6f8): additional relocation overflows omitted from the output
collect2: error: ld returned 1 exit status