全是 TAK,求条,在线等
#include <bits/stdc++.h>
using namespace std;
const int N = 100000 + 5;
int n, cnt;
int son[N][3], fail[N];
bool d[N], vis[N], vis2[N];
queue<int> q;
void insert(string s) {
int p = 0;
for (int i = 0; i < (int)s.size(); i++) {
if (!son[p][s[i] - '0']) son[p][s[i] - '0'] = ++cnt;
p = son[p][s[i] - '0'];
}
d[p] = true;
}
void get_fail() {
for (int i = 0; i < 2; i++) {
if (son[0][i]) {
q.push(son[0][i]);
}
}
while (!q.empty()) {
int u = q.front();
q.pop();
for (int i = 0; i < 2; i++) {
int v = son[u][i];
if (v) {
q.push(v);
int p = fail[u];
while (p && !son[p][i]) {
p = fail[p];
}
if (p) {
fail[v] = son[p][i];
d[v] |= d[son[p][i]];
} else {
fail[v] = 0;
}
} else {
son[u][i] = son[fail[u]][i];
}
}
}
}
void dfs(int u) {
if (vis[u]) {
cout << "TAK";
exit(0);
}
if (vis2[u] || d[u]) return;
vis[u] = vis2[u] = true;
for (int i = 0; i < 2; i++) {
dfs(son[u][i]);
}
vis[u] = false;
}
int main() {
cin >> n;
for (int i = 1; i <= n; i++) {
string x;
cin >> x;
insert(x);
}
get_fail();
dfs(0);
cout << "NIE";
return 0;
}