1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include <bits/stdc++.h>

using namespace std;

vector<bitset<50001>> lol;
//vector<bitset<30>> lol;
uint64_t n,m,q;

int main() {
    uint64_t tmp1,tmp2,tmp3;
    cin >> n >> m >> q;
    n++;
    lol.resize(n+m+1);
    for (int i=1; i<n; i++) {
        for (int j=1; j<n; j++) if (j % i == 0) lol.at(i).set(j,true);
    }
    for (int i=0; i<m; i++) {
        cin >> tmp1 >> tmp2;
        switch(tmp1) {
            case 1: {
                cin >> tmp3;
                lol.at(n+i) = lol.at(tmp2) | lol.at(tmp3);
                break;
            }
            case 2: {
                cin >> tmp3;
                lol.at(n+i) = lol.at(tmp2) & lol.at(tmp3);
                break;
            }
            case 3: {
                lol.at(n+i) = ~lol.at(tmp2);
                break;
            }
        }
        //cout << "n+i=" << n+i << " | " << lol.at(n+i).to_string() << endl;
    }
    for (int i=0; i<q; i++) {
        cin >> tmp1 >> tmp2;
        if (lol.at(tmp1).test(tmp2) == true) cout << "TAK\n";
        else cout << "NIE\n";
    }
    return 0;
}