OI XXIV - zaw

// https://szkopul.edu.pl/problemset/problem/fYzoFHo_2JRG4FQSt5UPRpn5/site/?key=statement

#include <bits/stdc++.h>

// #define GARY_DBG
#define GARY_LIB

constexpr int sizik = 1000 * 1001;

#define ar std::array

typedef std::vector<std::vector<int>> _kra;

std::vector<std::pair<int, int>> kra[sizik];

int ans[sizik];

int visited[sizik], curr, e, V;
int sp[sizik], curr_sp;
int sp_num[sizik];
void DFS(int v, int p) {
    if (visited[v] == curr) return;
    visited[v] = curr;
    V++;
    sp[curr_sp]++;
    sp_num[v] = curr_sp;
    for (const auto& [u, _] : kra[v]) {
        if (v <= u) e++;
        if (u == p) continue;
        DFS(u, v);
    }
}

int in[sizik];

constexpr int MOD = 1e9 + 7;
int binpow(int a, int b) {
    int ans = 1;
    for (int i = 0; i < b; i++) {
        ans = (ans * 2) % MOD;
    }
    return ans;
}

void solve() {
    int n;
    std::cin >> n;

    for (int i = 1; i <= n; i++) {
        char c;
        std::cin >> c;

        if (c == 'T') {
            int x;
            std::cin >> x;

            kra[x].push_back({x, i});
            ans[i] = x;
        } else {
            int a, b;
            std::cin >> a >> b;

            kra[a].push_back({b, i});
            kra[b].push_back({a, i});
        }
    }

    for (int i = 1; i <= n; i++) {
        if (kra[i].empty()) {
            std::cout << "NIE\n0\n";
            return;
        }
    }

    curr++;
    for (int i = 1; i <= n; i++) {
        if (visited[i] != curr) {
            e = 0, V = 0;
            curr_sp++;
            DFS(i, -1);
            if (e != V) {
                std::cout << "NIE\n0\n";
                return;
            }
        }
    }

    std::queue<int> q;
    for (int i = 1; i <= n; i++) {
        in[i] = kra[i].size();
    }
    for (int i = 1; i <= n; i++) {
        if (in[i] == 1) q.push(i);
    }
    while (!q.empty()) {
        int y = q.front();
        q.pop();
        sp[sp_num[y]]--;
        for (const auto& [u, i] : kra[y]) {
            if (ans[i] == 0) ans[i] = y;
            if (--in[u] == 1) {
                q.push(u);
            }
        }
    }
    // ss
    int k = 0;
    for (int i = 1; i <= curr_sp; i++) {
        if (sp[i] > 1) {
            k++;
        }
    }

    if (k == 0) {
        std::cout << "TAK\n";
        for (int i = 1; i <= n; i++) {
            std::cout << ans[i] << '\n';
        }
        return;
    }

    std::cout << "NIE\n";
    std::cout << binpow(2, k) << '\n';
}

int32_t main() {
#ifndef GARY_DBG
    std::ios_base::sync_with_stdio(0);
    std::cin.tie(0);
    std::cout.tie(0);
#endif

    int t = 1;
    // std::cin >> t;

    for (; t > 0; t--) {
        solve();
    }

    return 0;
}