/**
 * Rozwiazanie wzorcowe do zadania TAB (Tablica)
 * Autor: Jakub Radoszewski
 * Opis: Dwie duze mapy.
 */

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

#define M 1010

map<pair<int, int>, int> wiersze, kolumny;
int t[M][M];
int n, m;

void ustaw(map<pair<int, int>, int> &mapa, int w, int old, int k) {
  pair<int, int> p = make_pair(w, old);
  mapa[p]--;
  if (!mapa[p]) mapa.erase(mapa.find(p));
  p.second = k;
  mapa[p]++;
}

void wypisz() {
  printf("%s %s\n", (int)wiersze.size() < n * n ? "TAK" : "NIE",
                    (int)kolumny.size() < n * n ? "TAK" : "NIE");
}

int main() {
  scanf("%d", &n);
  for (int i = 0; i < n; i++)
    for (int j = 0; j < n; j++) {
      scanf("%d", t[i] + j);
      wiersze[make_pair(i, t[i][j])]++;
      kolumny[make_pair(j, t[i][j])]++;
    }
  wypisz();

  scanf("%d",&m);
  while (m--) {
    int a, b, k;
    scanf("%d%d%d", &a, &b, &k);
    a--; b--;
    ustaw(wiersze, a, t[a][b], k);
    ustaw(kolumny, b, t[a][b], k);
    t[a][b] = k;
    wypisz();
  }
  return 0;
}
