rt,WA on #4,5,6,8
#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e5+114;
class AC_automaton{
public:
int son[maxn][2],fail[maxn],sz[maxn],rt,tot,dfncnt;
vector<int> edge[maxn];//trie 图
vector<int> road[maxn];//fail 树
int dfn[maxn],tag[maxn];
void insert(string &s){
int len=s.size(),now=rt;
for(int i=0;i<len;i++){
if(son[now][s[i]-'0']==0) son[now][s[i]-'0']=++tot;
now=son[now][s[i]-'0'];
}
tag[now]=1;
sz[now]++;
}
void build(){
queue<int> q;
for(int i=0;i<2;i++) if(son[rt][i]) fail[son[rt][i]]=rt,q.push(son[rt][i]);
while(q.size()>0){
int u=q.front();
q.pop();
for(int i=0;i<2;i++){
if(son[u][i]){
fail[son[u][i]]=son[fail[u]][i];
if(tag[son[fail[u]][i]]) tag[son[u][i]]=1;
q.push(son[u][i]);
}
else son[u][i]=son[fail[u]][i];
}
}
for(int i=rt;i<=tot;i++){
for(int j=0;j<2;j++){
if(tag[i]==1||tag[son[i][j]]==1) continue;
edge[i].push_back(son[i][j]);
}
}
}
bool dfs(int u){
for(int v:edge[u]){
if(dfn[v]==0){
dfn[v]=dfn[u]+1;
if(dfs(v)==true) return true;
}
else if(dfn[v]<dfn[u]||v==u) return true;
}
return false;
}
}AC;
int n;
int main(){
cin>>n;
for(int i=1;i<=n;i++){
string s;
cin>>s;
AC.insert(s);
}
AC.build();
cout<<(AC.dfs(AC.rt)==true?"TAK\n":"NIE\n");
return 0;
}