#include <bits/stdc++.h>
using namespace std;
#define int long long
unordered_set<int> se;
bool bfs(int x,int y,int n,int k)
{
	vector<int> cur={x};
	set<int> vis={x};
	while (1)
	{
		
		vector<int> nxt;
		for (int i:cur)
		{
			for (int p=0;p<n;p++)
			{
				int z=i^(1<<p);
				if (se.find(z)==se.end() && vis.find(z)==vis.end())
					nxt.push_back(z),vis.insert(z);
			}
		}
		if (nxt.empty())
			return vis.find(y)!=vis.end();
		else if(nxt.size()>3*k)
			return 1;
		else
			cur=nxt;
	}
}
signed main()
{
	int n,k;
	cin>>n>>k;
	string s,s1;
	cin>>s>>s1;
	int x=0,y=0;
	for (char c:s)
		x=x*2+c-'0';
	for (char c:s1)
		y=y*2+c-'0';
	for (int i=0;i<k;i++)
	{
		char c;
		int val=0;
		for (int j=0;j<n;j++)
		{
			cin>>c;
			val=val*2+c-'0';
		}
		se.insert(val);
	}
	if (bfs(x,y,n,k) && bfs(y,x,n,k))
		cout<<"TAK"<<endl;
	else
		cout<<"NIE"<<endl;
	
	return 0;
}
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict  | Execution time | Memory | Grader output | 
|---|
| Fetching results... |