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
107
108
109
110
111
112
113
114
115
116
117
#include<bits/stdc++.h>

using namespace std;

int n, m, k;
long long x=0, z, r, c;
string pole[100003]; //0 pole wolne, do którego mogę bez problemu dojść, 1 - pole do którego juz nie mogę dojść; 2-pole które na pewno należy do rozwiazania

bool czy(int a, int b)  //funkcja zwraca czy da sie dojsc na pole (a, b) w aktualnej sytuacji
{
    if( (pole[a-1][b]=='1' || pole [a-1][b]=='3') && (pole[a][b-1]=='1' || pole [a][b-1]=='3') )
        return false; //nie mozna dojsc

    return true; //mozna dojsc
}

bool rob(int a, int b)
{
    bool mozna=1;

    pole[a][b]='3';
    for(int i=a; i<=n; i++)
    {
        for(int j=b; j<=m; j++)
        {
            if(pole[i][j]=='1')
            {
                break;
            }
            if(pole[i][j]=='2' && czy(i, j)==0)
            {
                mozna = 0;
                break;
            }
            if(pole[i][j]=='0' && czy(i, j)==0)
            {
                pole[i][j]='3';
            }
        }
    }

    if(mozna==0)  //musze zamienic postawione trojki na zera, zamienic pole (a, b) na '2' i zniszczyc ta warownie
    {
        pole[a][b]='2';
        for(int i=a; i<=n; i++)
        {
            for(int j=b; j<=m; j++)
            {
                if(pole[i][j]=='1')
                    break;
                if(pole[i][j]=='3')
                    pole[i][j]='0';
            }
        }

        return true;
    }
    else  //musze zamienic postawione trojki na jedynki i zostawic ta warownie
    {
        for(int i=a; i<=n; i++)
        {
            for(int j=b; j<=m; j++)
            {
                if(pole[i][j]=='1')
                    break;
                if(pole[i][j]=='3')
                    pole[i][j]='1';
            }
        }

        return false;
    }
}

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

    string p="1";
    for(int j=0; j<m; j++)
        p+="1";

    pole[0]=p;

    p="1";
    for(int j=0; j<m; j++)
        p+="0";

    for(int i=1; i<=n; i++)
        pole[i]=p;

    pole[1][1]='2';
    pole[n][m]='2';

    for(int i=0; i<k; i++)
    {
        scanf("%lld %lld %lld", &r, &c, &z);

        r=(r^x)%n;
        c=(c^x)%m;

        r++;
        c++;

        if(rob(r, c))
        {
            x=(x^z);
            printf("TAK\n");
        }
        else
            printf("NIE\n");


    }
    return 0;

}