#include <bits/stdc++.h>   using namespace std;   const int maxn = 500 + 5;   const int mod = 26;   long long qp(long long a, long long n) {     long long res = 1;     while (n > 0) {       if (n & 1) res = res * a % mod;       a = a * a % mod;       n >>= 1;     }     return res;   }   template <class T>   inline bool scan(T &ret) {     char c;     int sgn;     if (c = getchar(), c == EOF) return 0;     while (c !=  -  && (c <  0  || c >  9 )) c = getchar();     sgn = (c ==  - ) ? -1 : 1;     ret = (c ==  - ) ? 0 : (c -  0 );     while (c = getchar(), c >=  0  && c <=  9 ) ret = ret * 10 + (c -  0 );     ret *= sgn;     return 1;   }   template <class T>   inline void out(T x) {     if (x > 9) out(x / 10);     putchar(x % 10 +  0 );   }   int n, m;   vector<pair<int, int> > mp[maxn];   int flag[maxn];   int res[maxn];   int main() {     scan(n), scan(m);     int x;     int flagt = 0, tmp = 0;     for (int i = 1; i <= n; ++i) {       for (int j = 1; j <= m; ++j) {         scan(x);         mp[i].emplace_back(x, j);       }       sort(mp[i].begin(), mp[i].end());       mp[i].erase(unique(mp[i].begin(), mp[i].end(),                          [](pair<int, int> &x, pair<int, int> &y) {                            return x.first == y.first;                          }),                   mp[i].end());       res[i] = mp[i][0].second;       if (mp[i].size() == 1) {         flag[i] = 1;         tmp ^= mp[i][0].first;       } else {         if (flagt == 0)           flagt = i;         else {           tmp ^= mp[i][0].first, flag[i] = 1;         }       }     }     for (int i = 0; i < mp[flagt].size(); ++i) {       if ((tmp ^ mp[flagt][i].first) != 0) {         res[flagt] = mp[flagt][i].second;         tmp ^= mp[flagt][i].first;         flagt = -1;         break;       }     }     if (flagt == -1 || (flagt == 0 && tmp)) {       puts( TAK );       for (int i = 1; i <= n; ++i) {         printf( %d  , res[i]);       }     } else {       puts( NIE );     }     return 0;   }   