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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#include <bits/stdc++.h>
using namespace std;

int main() {
    ios::sync_with_stdio(0); cin.tie(0);

    int N, M, Q;
    cin >> N >> M >> Q;

    int fullMask = (1 << N) - 1;
    vector<int> masksArray(1, 0);

    for (int X = 1; X <= N; ++X) {
        int mask = 0;
        for (int v = X; v <= N; v += X) {
            mask |= 1 << (v - 1);
        }
        masksArray.push_back(mask);
    }

    for (int i = 0; i < M; ++i) {
        int operationType;
        cin >> operationType;
        if (operationType == 1 || operationType == 2) {
            int X, Y;
            cin >> X >> Y;
            --X; --Y;
            int A = masksArray[X + 1];
            int B = masksArray[Y + 1];
            int newMask;
            if (operationType == 1) {
                newMask = A | B;
            } else {
                newMask = A & B;
            }
            masksArray.push_back(newMask);
        } else {
            int X;
            cin >> X;
            --X;
            int A = masksArray[X + 1];
            int newMask = A ^ fullMask;
            masksArray.push_back(newMask);
        }
    }

    for (int i = 0; i < Q; ++i) {
        int X, v;
        cin >> X >> v;
        --X; --v;
        if ((masksArray[X + 1] >> v) & 1) {
            cout << "TAK" << endl;
        } else {
            cout << "NIE" << endl;
        }
    }

    return 0;
}