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
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
#include <cstdio>
#include <cstdint>
#include <vector>
#include <bitset>

using namespace std;

vector<vector<uint32_t>> vecs;
int n,m,q;
int vec_size;

vector<uint32_t> new_vec ()
{
    vector<uint32_t> result = vector<uint32_t>(vec_size);

    for(int i = 0;i< vec_size; ++i)
    {
        result[i]= 0;
    }
    return result;
}



int main ()
{
    scanf("%d %d %d", &n, &m, &q);

    //n = 33;

    vec_size = (n >> 5) + 3;

    for(int i = 0;i<=n;++i)
    {
        vecs.push_back(new_vec());
    }

    
    for(int i = 1;i<=n;++i)
    {
        for(int j = i; j<=n; j+=i)
        {
            int index = (j-1) >> 5;
            uint32_t subindex = 1 << ((j-1) & 0xff);
            vecs[i][index]|=subindex;
            //printf("%d %d %d %d\n", i, index, subindex, vecs[i][index] );
        }
    }
    

    int a,b,c;

    for(int i = 0; i< m;++i)
    {
        scanf("%d", &a);
        vector<uint32_t> toAppend = new_vec();
        switch (a)
        {
        case 1:
            scanf("%d %d", &b, &c);
            for(int i =0;i<vec_size;++i)
            {
                toAppend[i]=vecs[b][i] | vecs[c][i];
            }
            break;
        case 2:
            scanf("%d %d", &b, &c);
            for(int i =0;i<vec_size;++i)
            {
                toAppend[i]=vecs[b][i] & vecs[c][i];
            }
            break;
        case 3:
            scanf("%d", &b);
            for(int i =0;i<vec_size;++i)
            {
                toAppend[i]=~vecs[b][i];
            }
            break;
        }
        // printf("%d %d %d\n", a,b,c);
        vecs.push_back(toAppend);
    }
    //printf("fdfaf");
    
    for (int i =0;i<q;++i)
    {
        scanf("%d %d", &b, &c);

        int index = (c-1) >> 5;
        uint32_t subindex = 1 << ((c-1) & 0xff);


        if(vecs[b][index] & subindex){
            printf("TAK\n");
        }
        else
        {
            printf("NIE\n");
        }
    }
    
    //printf("%d %d %d\n", n,m,q);

}