/**
 * Rozwiazanie wzorcowe zadania TAB
 * Autor: Wojciech Tyczynski
 * Data: 2012-02-21
 */

#include <cstdio>
#include <string>
#include <map>
using namespace std;

const int MAX_N = 1000;

int n, m;
int T[MAX_N][MAX_N];
map<int, int> row[MAX_N], col[MAX_N];
int rows = 0, cols = 0;

string comp(int x) {
	return (x == 0) ? "NIE" : "TAK";
}

void showResult() {
	printf("%s %s\n", comp(rows).c_str(), comp(cols).c_str());
}

void add(int i, int j, int k) {
	row[i][k]++;
	if (row[i][k] == 2) {
		rows++;
	}
	col[j][k]++;
	if (col[j][k] == 2) {
		cols++;
	}
}

void sub(int i, int j, int k) {
	row[i][k]--;
	if (row[i][k] == 1) {
		rows--;
	}
	col[j][k]--;
	if (col[j][k] == 1) {
		cols--;
	}
}


int main() {
	scanf("%d", &n);
	for (int i = 0; i < n; i++) {
		for (int j = 0; j < n; j++) {
			scanf("%d", &T[i][j]);
			add(i, j, T[i][j]);
		}
	}
	showResult();

	scanf("%d", &m);

	int a, b, c;
	for (int qqq = 0; qqq < m; qqq++) {
		scanf("%d%d%d", &a, &b, &c);
		a--, b--;
		sub(a, b, T[a][b]);
		T[a][b] = c;
		add(a, b, T[a][b]);
		showResult();
	}	
	
	return 0;
}
