// https://szkopul.edu.pl/problemset/problem/lk3fxEbWZRKSfjpHbEQT9wGN/site/?key=statement
// Walki robotów
#include <bits/stdc++.h>
#define int long long
constexpr int sizik = 1000 * 1001;
#define ar std::array
#define pr std::pair
#define vec std::vector
typedef vec<vec<int>> _kra;
int z[sizik];
bool k[sizik];
int rep[sizik], l[sizik], os[sizik];
void init(int _bn) {
for (int i = 0; i <= _bn; i++) {
rep[i] = i;
l[i] = k[i];
os[i] = 1;
}
}
int Find(int a) {
if (rep[a] != a) rep[a] = Find(rep[a]);
return rep[a];
}
void Union(int a, int b) {
a = Find(a), b = Find(b);
l[b] += l[a];
os[b] += os[a];
rep[a] = b;
}
void solve() {
int n;
std::cin >> n;
for (int i = 1; i <= n; i++) {
int a, b;
std::cin >> a >> b;
z[a] = b;
}
if (n == 0) {
std::cout << "TAK\n";
return;
}
if (n == 1) {
std::cout << "NIE\n";
return;
}
int maxi = z[n];
for (int i = n - 1; i >= 1; i--) {
if (z[i] < maxi) {
k[i] = true;
} else {
maxi = z[i];
}
}
init(n);
int akt = z[1], prev = 1;
std::set<int> v;
for (int i = 1; i <= n; i++) {
if (i == z[1]) continue;
v.insert(i);
}
for (int i = 2; i <= n; i++) {
v.erase(z[i]);
if (z[i] < akt) {
Union(prev, i);
} else {
if ((int)v.size() > 0 && *v.begin() < akt) {
Union(prev, i);
}
akt = z[i];
prev = i;
}
}
std::vector<bool> visited(n + 1);
for (int i = 1; i <= n; i++) {
int x = Find(i);
if (visited[x]) continue;
visited[x] = true;
if ((os[x] % 2 == 0) || ((os[x] % 2 == 1) && l[x] > 0)) {
} else {
std::cout << "NIE\n";
return;
}
}
std::cout << "TAK\n";
}
int32_t main() {
std::ios_base::sync_with_stdio(0);
std::cin.tie(0);
std::cout.tie(0);
int t = 1;
// std::cin >> t;
for (; t > 0; t--) {
solve();
}
return 0;
}