輸入n行,m列。從每一行取一個值,使他們的異或和>0,輸出TAK和n個滿足條件的每一行的列數,如果不能構成,輸出NIE。
/*
* codeforces1151B Dima and a Bad XOR
* Created by hao on 2019/4/19.
* 輸入n行,m列。從每一行取一個值,使他們的異或和>0。
* 輸出TAK和n個滿足條件的每一行的列數,如果不能構成,輸出NIE。
* 異或的一些性質
* 0^0=0,0^1=1,1^0=1,1^1=0
* 相同取0,相異取1
* 輸入A取0,則輸出p=輸入B
* 輸入A取1,則輸出p=輸入B的反
*/
#include <cstdio>
#include <cstring>
#include <cmath>
#include <iostream>
#include <algorithm>
#include <set>
#include <vector>
using namespace std;
#define ll long long
int main() {
cin.tie(0);
ios_base::sync_with_stdio(false);
int h, w;
cin >> h >> w;
int a[505][505];
int cur = 0;
//讀入資料,cur對每一行第一個異或(^)
for (int i = 0; i < h; ++i) {
for (int j = 0; j < w; ++j) {
cin >> a[i][j];
}
cur ^= a[i][0];
}
//定義初始值,去判斷是否有符合條件的存在。
int px = -1, py = -1;
for (int i = 0; i < h && px == -1; ++i) {
for (int j = 0; j < w; ++j) {
//讓目前值和每一行的第一個進行異或,如果滿足和>0即可跳出,記錄行數和列數,友善輸出
int nxt = cur ^ a[i][0] ^ a[i][j];
if (nxt > 0) {
px = i, py = j+1;
break;
}
}
}
//根據前面的判斷分情況輸出
if (px >= 0 && py >= 0) {
cout << "TAK" << endl;
for (int i = 0; i < h; ++i) {
if (i) cout << ' ';
cout << (i == px ? py : 1);
}
cout << endl;
}
else {
cout << "NIE" << endl;
}
return 0;
}