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
106
#include <iostream>
#include <vector>
#include <string>

using namespace std;

int szukaj(vector<int> T, int elem) {
	for (int i = 0; i < T.size(); i++) {
		if (T[i] == elem) {
			return i;
		}
	}
	
	return -1;
}

vector<int> suma(vector<int> A, vector<int> B) {
	vector<int> C;
	C = A;
	
	for (int i = 0; i < B.size(); i++) {
		if (szukaj(A, B[i]) == -1) {
			C.push_back(B[i]);
		}
	}
	
	return C;
}

vector<int> przeciecie(vector<int> A, vector<int> B) {
	vector<int> C;
	
	for (int i = 0; i < A.size(); i++) {
		if (szukaj(B, A[i]) > -1) {
			C.push_back(A[i]);
		}
	}
	
	return C;
}

vector<int> negacja(vector<int> A, int n) {
	vector<int> C;
	
	for (int i = 0; i < n; i++) {
		if (szukaj(A, i + 1) == -1) {
			C.push_back(i + 1);
		}
	}
	
	return C;
}

int main() {
	int n, m, q;
	int operacja, x, y;
	int a, b;
	vector<string> odpowiedzi;
	
	cin >> n >> m >> q;
	
	vector<vector<int>> A;
	
	for (int j = 1; j <= n; j++) {
		vector<int> B;
		
		for (int i = 1; i <= n; i++) {
			if (i % j == 0) {
				B.push_back(i);
			}
		}
		
		A.push_back(B);
	}
	
	for (int i = 1; i <= m; i++) {
		cin >> operacja;
		
		if (operacja == 1) {
			cin >> x >> y;
			A.push_back(suma(A[x - 1], A[y - 1]));
		} else if (operacja == 2) {
			cin >> x >> y;
			A.push_back(przeciecie(A[x - 1], A[y - 1]));
		} else {
			cin >> x;
			A.push_back(negacja(A[x - 1], n));
		}
	}
	
	for (int i = 0; i < q; i++) {
		cin >> a >> b;
		
		if (szukaj(A[a - 1], b) > -1) {
			odpowiedzi.push_back("TAK");
		} else {
			odpowiedzi.push_back("NIE");
		}
	}
	
	for (int i = 0; i < q; i++) {
		cout << odpowiedzi[i] << "\n";
	}
	
	return 0;
}