#define _CRT_SECURE_NO_WARNINGS
#include <cstdio>
#include <vector>
#include <functional>
#include <string>
#include <algorithm>
#include <set>
#include <map>
#include <set>
#include <cstdlib>
#include <cassert>
#include <unordered_map>
#include <unordered_set>
#include <queue>
#include <numeric>
#include <deque>
#include <random>
#include <chrono>
#include <ctime>
#include <climits>
#include <stack>
#include <array>
#include <iomanip>
#include <complex>
#include <bitset>
#include <iostream>
#include <cstring>
using namespace std;
using ll = long long;
using ld = double;
#define n_l '\n'
#define dbg(...) cout << "[" << #__VA_ARGS__ << "]: "; cout << to_string(__VA_ARGS__) << endl
template <typename T, size_t N> int SIZE(const T(&t)[N]) { return N; } template<typename T> int SIZE(const T &t) { return t.size(); } string to_string(const string s, int x1 = 0, int x2 = 1e9) { return '"' + ((x1 < s.size()) ? s.substr(x1, x2 - x1 + 1) : "") + '"'; } string to_string(const char* s) { return to_string((string)s); } string to_string(const bool b) { return (b ? "true" : "false"); } string to_string(const char c) { return string({ c }); } template<size_t N> string to_string(const bitset<N> &b, int x1 = 0, int x2 = 1e9) { string t = ""; for (int __iii__ = min(x1, SIZE(b)), __jjj__ = min(x2, SIZE(b) - 1); __iii__ <= __jjj__; ++__iii__) { t += b[__iii__] + '0'; } return '"' + t + '"'; } template <typename A, typename... C> string to_string(const A(&v), int x1 = 0, int x2 = 1e9, C... coords); int l_v_l_v_l = 0, t_a_b_s = 0; template <typename A, typename B> string to_string(const pair<A, B> &p) { l_v_l_v_l++; string res = "(" + to_string(p.first) + ", " + to_string(p.second) + ")"; l_v_l_v_l--; return res; } template <typename A, typename... C> string to_string(const A(&v), int x1, int x2, C... coords) { int rnk = rank<A>::value; string tab(t_a_b_s, ' '); string res = ""; bool first = true; if (l_v_l_v_l == 0) res += n_l; res += tab + "["; x1 = min(x1, SIZE(v)), x2 = min(x2, SIZE(v)); auto l = begin(v); advance(l, x1); auto r = l; advance(r, (x2 - x1) + (x2 < SIZE(v))); for (auto e = l; e != r; e = next(e)) { if (!first) { res += ", "; } first = false; l_v_l_v_l++; if (e != l) { if (rnk > 1) { res += n_l; t_a_b_s = l_v_l_v_l; }; } else { t_a_b_s = 0; } res += to_string(*e, coords...); l_v_l_v_l--; } res += "]"; if (l_v_l_v_l == 0) res += n_l; return res; } void dbgm() { ; } template<typename Heads, typename... Tails> void dbgm(Heads H, Tails... T) { cout << to_string(H) << " | "; dbgm(T...); }
#define dbgm(...) cout << "[" << #__VA_ARGS__ << "]: "; dbgm(__VA_ARGS__); cout << endl
//#define FAST_ALLOCATOR_MEMORY 2e8
#ifdef FAST_ALLOCATOR_MEMORY // 2e8
int allocator_pos = 0;
char allocator_memory[(int)FAST_ALLOCATOR_MEMORY];
inline void * operator new (size_t n) {
char *res = allocator_memory + allocator_pos;
allocator_pos += n;
assert(allocator_pos <= (int)FAST_ALLOCATOR_MEMORY);
return (void *)res;
}
inline void operator delete (void *) noexcept { }
//inline void * operator new [] ( size_t ) { assert(0); }
//inline void operator delete [] ( void * ) { assert(0); }
#endif
bool DEBUGGING = 0;
#define all(a) a.begin(), a.end()
#define pii pair<int, int>
#define len(a) (int)a.size()
#define pb push_back
#define eb emplace_back
#define em emplace
#define y0 withindarkness
#define y1 apinklotusbloomed
#define yn carryingapurplesoul
#define j1 togetherformingtheTeam
/*Всё,
пиздуй-бороздуй, и я попиздил, нахуй*/
void useiostream() {
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cerr.tie(0);
}
void drop(char const *bu) {
printf("%s", bu);
exit(0);
}
ll gcd(ll a, ll b) {
return b == 0 ? a : gcd(b, a % b);
}
ll lcm(ll a, ll b) {
return a / gcd(a, b)*b;
}
ld const pi = acos(-1.0);
ld const eps = 0.000000001;
template<typename T, typename TT> bool mi(T &a, TT b) { return a > b ? (a = b, true) : false; }
template<typename T, typename TT> bool ma(T &a, TT b) { return a < b ? (a = b, true) : false; }
mt19937 ran(time(0));
int const mod = (int)1e9 + 9;
int bp(int a, int p) {
int re = 1;
while (p) {
if (p & 1)re = (re *1LL* a) % mod;
p >>= 1;
a = (a *1LL * a) % mod;
}
return re;
}
int inv(int a) {
return bp(a, mod - 2);
}
int n, m;
int arr[505][505][15];
int cnt[505][15];
int main() {
#ifdef _DEBUG
DEBUGGING = 1;
freopen("input.txt", "r", stdin);
freopen("output.txt", "w", stdout);
#else
//freopen("points.in", "r", stdin);
//freopen("points.out", "w", stdout);
#endif
useiostream();
cin >> n >> m;
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
int a;
cin >> a;
for (int k = 0; k < 10; k++) {
arr[i][j][k] = ((a & (1 << k)) != 0);
cnt[i][k]+= arr[i][j][k];
}
}
}
for (int k = 0; k < 10; k++) {
vector<int> ps(n);
vector<int> res(n);
for (int i = 0; i < n; i++)ps[i] = i;
sort(all(ps), [&](int l, int r) {return cnt[l][k] > cnt[r][k]; });
int ct = 0;
int last = -1;
for (int i = 0; i < n; i++) {
if (cnt[ps[i]][k] == m) {
ct++;
last = i;
}
}
if (ct & 1) {
cout << "TAK\n";
for (int i = 0; i <= last; i++) {
res[ps[i]] = 1;
}
for (int i = last + 1; i < n; i++) {
for (int j = 0; j < m; j++) {
if (arr[ps[i]][j][k] == 0)res[ps[i]] = j + 1;
}
}
for (int i = 0; i < n; i++) {
cout << res[i] << " ";
}
return 0;
}
else {
for (int i = last + 1; i < n && (ct % 2 )== 0; i++) {
if (cnt[ps[i]][k]) {
for (int j = 0; j < m; j++)if (arr[ps[i]][j][k]) {
ct++;
break;
}
}
}
if (ct & 1) {
cout << "TAK\n";
for (int i = 0; i <= last; i++) {
res[ps[i]] = 1;
}
bool got = 0;
for (int i = last + 1; i < n; i++) {
if (cnt[ps[i]][k] && !got) {
got = 1;
for (int j = 0; j < m; j++)if (arr[ps[i]][j][k])res[ps[i]] = j + 1;
}
else {
for (int j = 0; j < m; j++)if (arr[ps[i]][j][k] == 0)res[ps[i]] = j + 1;
}
}
for (int i = 0; i < n; i++) {
cout << res[i] << " ";
}
return 0;
}
}
}
cout << "NIE";
return 0;
}
77u/I2RlZmluZSBfQ1JUX1NFQ1VSRV9OT19XQVJOSU5HUwojaW5jbHVkZSA8Y3N0ZGlvPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8ZnVuY3Rpb25hbD4KI2luY2x1ZGUgPHN0cmluZz4KI2luY2x1ZGUgPGFsZ29yaXRobT4KI2luY2x1ZGUgPHNldD4KI2luY2x1ZGUgPG1hcD4KI2luY2x1ZGUgPHNldD4KI2luY2x1ZGUgPGNzdGRsaWI+CiNpbmNsdWRlIDxjYXNzZXJ0PgojaW5jbHVkZSA8dW5vcmRlcmVkX21hcD4KI2luY2x1ZGUgPHVub3JkZXJlZF9zZXQ+CiNpbmNsdWRlIDxxdWV1ZT4KI2luY2x1ZGUgPG51bWVyaWM+CiNpbmNsdWRlIDxkZXF1ZT4KI2luY2x1ZGUgPHJhbmRvbT4KI2luY2x1ZGUgPGNocm9ubz4KI2luY2x1ZGUgPGN0aW1lPgojaW5jbHVkZSA8Y2xpbWl0cz4KI2luY2x1ZGUgPHN0YWNrPgojaW5jbHVkZSA8YXJyYXk+CiNpbmNsdWRlIDxpb21hbmlwPgojaW5jbHVkZSA8Y29tcGxleD4KI2luY2x1ZGUgPGJpdHNldD4KI2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8Y3N0cmluZz4KCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CnVzaW5nIGxsID0gbG9uZyBsb25nOwp1c2luZyBsZCA9IGRvdWJsZTsKCiNkZWZpbmUgbl9sICdcbicKI2RlZmluZSBkYmcoLi4uKSBjb3V0IDw8ICJbIiA8PCAjX19WQV9BUkdTX18gPDwgIl06ICI7IGNvdXQgPDwgdG9fc3RyaW5nKF9fVkFfQVJHU19fKSA8PCBlbmRsCnRlbXBsYXRlIDx0eXBlbmFtZSBULCBzaXplX3QgTj4gaW50IFNJWkUoY29uc3QgVCgmdClbTl0pIHsgcmV0dXJuIE47IH0gdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW50IFNJWkUoY29uc3QgVCAmdCkgeyByZXR1cm4gdC5zaXplKCk7IH0gc3RyaW5nIHRvX3N0cmluZyhjb25zdCBzdHJpbmcgcywgaW50IHgxID0gMCwgaW50IHgyID0gMWU5KSB7IHJldHVybiAnIicgKyAoKHgxIDwgcy5zaXplKCkpID8gcy5zdWJzdHIoeDEsIHgyIC0geDEgKyAxKSA6ICIiKSArICciJzsgfSBzdHJpbmcgdG9fc3RyaW5nKGNvbnN0IGNoYXIqIHMpIHsgcmV0dXJuIHRvX3N0cmluZygoc3RyaW5nKXMpOyB9IHN0cmluZyB0b19zdHJpbmcoY29uc3QgYm9vbCBiKSB7IHJldHVybiAoYiA/ICJ0cnVlIiA6ICJmYWxzZSIpOyB9IHN0cmluZyB0b19zdHJpbmcoY29uc3QgY2hhciBjKSB7IHJldHVybiBzdHJpbmcoeyBjIH0pOyB9IHRlbXBsYXRlPHNpemVfdCBOPiBzdHJpbmcgdG9fc3RyaW5nKGNvbnN0IGJpdHNldDxOPiAmYiwgaW50IHgxID0gMCwgaW50IHgyID0gMWU5KSB7IHN0cmluZyB0ID0gIiI7IGZvciAoaW50IF9faWlpX18gPSBtaW4oeDEsIFNJWkUoYikpLCBfX2pqal9fID0gbWluKHgyLCBTSVpFKGIpIC0gMSk7IF9faWlpX18gPD0gX19qampfXzsgKytfX2lpaV9fKSB7IHQgKz0gYltfX2lpaV9fXSArICcwJzsgfSByZXR1cm4gJyInICsgdCArICciJzsgfSB0ZW1wbGF0ZSA8dHlwZW5hbWUgQSwgdHlwZW5hbWUuLi4gQz4gc3RyaW5nIHRvX3N0cmluZyhjb25zdCBBKCZ2KSwgaW50IHgxID0gMCwgaW50IHgyID0gMWU5LCBDLi4uIGNvb3Jkcyk7IGludCBsX3ZfbF92X2wgPSAwLCB0X2FfYl9zID0gMDsgdGVtcGxhdGUgPHR5cGVuYW1lIEEsIHR5cGVuYW1lIEI+IHN0cmluZyB0b19zdHJpbmcoY29uc3QgcGFpcjxBLCBCPiAmcCkgeyBsX3ZfbF92X2wrKzsgc3RyaW5nIHJlcyA9ICIoIiArIHRvX3N0cmluZyhwLmZpcnN0KSArICIsICIgKyB0b19zdHJpbmcocC5zZWNvbmQpICsgIikiOyBsX3ZfbF92X2wtLTsgcmV0dXJuIHJlczsgfSB0ZW1wbGF0ZSA8dHlwZW5hbWUgQSwgdHlwZW5hbWUuLi4gQz4gc3RyaW5nIHRvX3N0cmluZyhjb25zdCBBKCZ2KSwgaW50IHgxLCBpbnQgeDIsIEMuLi4gY29vcmRzKSB7IGludCBybmsgPSByYW5rPEE+Ojp2YWx1ZTsgc3RyaW5nIHRhYih0X2FfYl9zLCAnICcpOyBzdHJpbmcgcmVzID0gIiI7IGJvb2wgZmlyc3QgPSB0cnVlOyBpZiAobF92X2xfdl9sID09IDApIHJlcyArPSBuX2w7IHJlcyArPSB0YWIgKyAiWyI7IHgxID0gbWluKHgxLCBTSVpFKHYpKSwgeDIgPSBtaW4oeDIsIFNJWkUodikpOyBhdXRvIGwgPSBiZWdpbih2KTsgYWR2YW5jZShsLCB4MSk7IGF1dG8gciA9IGw7IGFkdmFuY2UociwgKHgyIC0geDEpICsgKHgyIDwgU0laRSh2KSkpOyBmb3IgKGF1dG8gZSA9IGw7IGUgIT0gcjsgZSA9IG5leHQoZSkpIHsgaWYgKCFmaXJzdCkgeyByZXMgKz0gIiwgIjsgfSBmaXJzdCA9IGZhbHNlOyBsX3ZfbF92X2wrKzsgaWYgKGUgIT0gbCkgeyBpZiAocm5rID4gMSkgeyByZXMgKz0gbl9sOyB0X2FfYl9zID0gbF92X2xfdl9sOyB9OyB9IGVsc2UgeyB0X2FfYl9zID0gMDsgfSByZXMgKz0gdG9fc3RyaW5nKCplLCBjb29yZHMuLi4pOyBsX3ZfbF92X2wtLTsgfSByZXMgKz0gIl0iOyBpZiAobF92X2xfdl9sID09IDApIHJlcyArPSBuX2w7IHJldHVybiByZXM7IH0gdm9pZCBkYmdtKCkgeyA7IH0gdGVtcGxhdGU8dHlwZW5hbWUgSGVhZHMsIHR5cGVuYW1lLi4uIFRhaWxzPiB2b2lkIGRiZ20oSGVhZHMgSCwgVGFpbHMuLi4gVCkgeyBjb3V0IDw8IHRvX3N0cmluZyhIKSA8PCAiIHwgIjsgZGJnbShULi4uKTsgfQojZGVmaW5lIGRiZ20oLi4uKSBjb3V0IDw8ICJbIiA8PCAjX19WQV9BUkdTX18gPDwgIl06ICI7IGRiZ20oX19WQV9BUkdTX18pOyBjb3V0IDw8IGVuZGwKCi8vI2RlZmluZSBGQVNUX0FMTE9DQVRPUl9NRU1PUlkgMmU4CgojaWZkZWYgRkFTVF9BTExPQ0FUT1JfTUVNT1JZIC8vIDJlOAppbnQgYWxsb2NhdG9yX3BvcyA9IDA7CmNoYXIgYWxsb2NhdG9yX21lbW9yeVsoaW50KUZBU1RfQUxMT0NBVE9SX01FTU9SWV07CmlubGluZSB2b2lkICogb3BlcmF0b3IgbmV3IChzaXplX3QgbikgewoJY2hhciAqcmVzID0gYWxsb2NhdG9yX21lbW9yeSArIGFsbG9jYXRvcl9wb3M7CglhbGxvY2F0b3JfcG9zICs9IG47Cglhc3NlcnQoYWxsb2NhdG9yX3BvcyA8PSAoaW50KUZBU1RfQUxMT0NBVE9SX01FTU9SWSk7CglyZXR1cm4gKHZvaWQgKilyZXM7Cn0KaW5saW5lIHZvaWQgb3BlcmF0b3IgZGVsZXRlICh2b2lkICopIG5vZXhjZXB0IHsgfQovL2lubGluZSB2b2lkICogb3BlcmF0b3IgbmV3IFtdICggc2l6ZV90ICkgeyBhc3NlcnQoMCk7IH0KLy9pbmxpbmUgdm9pZCBvcGVyYXRvciBkZWxldGUgW10gKCB2b2lkICogKSB7IGFzc2VydCgwKTsgfQojZW5kaWYKCmJvb2wgREVCVUdHSU5HID0gMDsKCiNkZWZpbmUgYWxsKGEpIGEuYmVnaW4oKSwgYS5lbmQoKQojZGVmaW5lIHBpaSBwYWlyPGludCwgaW50PgojZGVmaW5lIGxlbihhKSAoaW50KWEuc2l6ZSgpCiNkZWZpbmUgcGIgcHVzaF9iYWNrCiNkZWZpbmUgZWIgZW1wbGFjZV9iYWNrCiNkZWZpbmUgZW0gZW1wbGFjZQojZGVmaW5lIHkwIHdpdGhpbmRhcmtuZXNzCiNkZWZpbmUgeTEgYXBpbmtsb3R1c2Jsb29tZWQKI2RlZmluZSB5biBjYXJyeWluZ2FwdXJwbGVzb3VsCiNkZWZpbmUgajEgdG9nZXRoZXJmb3JtaW5ndGhlVGVhbQoKLyrQktGB0ZEsCtC/0LjQt9C00YPQuS3QsdC+0YDQvtC30LTRg9C5LCDQuCDRjyDQv9C+0L/QuNC30LTQuNC7LCDQvdCw0YXRg9C5Ki8KCnZvaWQgdXNlaW9zdHJlYW0oKSB7Cglpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKDApOwoJY2luLnRpZSgwKTsKCWNvdXQudGllKDApOwoJY2Vyci50aWUoMCk7Cn0KCnZvaWQgZHJvcChjaGFyIGNvbnN0ICpidSkgewoJcHJpbnRmKCIlcyIsIGJ1KTsKCWV4aXQoMCk7Cn0KCmxsIGdjZChsbCBhLCBsbCBiKSB7CglyZXR1cm4gYiA9PSAwID8gYSA6IGdjZChiLCBhICUgYik7Cn0KCmxsIGxjbShsbCBhLCBsbCBiKSB7CglyZXR1cm4gYSAvIGdjZChhLCBiKSpiOwp9CgpsZCBjb25zdCBwaSA9IGFjb3MoLTEuMCk7CmxkIGNvbnN0IGVwcyA9IDAuMDAwMDAwMDAxOwoKdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVFQ+IGJvb2wgbWkoVCAmYSwgVFQgYikgeyByZXR1cm4gYSA+IGIgPyAoYSA9IGIsIHRydWUpIDogZmFsc2U7IH0KdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgVFQ+IGJvb2wgbWEoVCAmYSwgVFQgYikgeyByZXR1cm4gYSA8IGIgPyAoYSA9IGIsIHRydWUpIDogZmFsc2U7IH0KCm10MTk5MzcgcmFuKHRpbWUoMCkpOwoKaW50IGNvbnN0IG1vZCA9IChpbnQpMWU5ICsgOTsKCmludCBicChpbnQgYSwgaW50IHApIHsKCWludCByZSA9IDE7Cgl3aGlsZSAocCkgewoJCWlmIChwICYgMSlyZSA9IChyZSAqMUxMKiBhKSAlIG1vZDsKCQlwID4+PSAxOwoJCWEgPSAoYSAqMUxMICogYSkgJSBtb2Q7Cgl9CglyZXR1cm4gcmU7Cn0KCmludCBpbnYoaW50IGEpIHsKCXJldHVybiBicChhLCBtb2QgLSAyKTsKfQoKaW50IG4sIG07CmludCBhcnJbNTA1XVs1MDVdWzE1XTsKaW50IGNudFs1MDVdWzE1XTsKCmludCBtYWluKCkgewoKI2lmZGVmIF9ERUJVRwoJREVCVUdHSU5HID0gMTsKCWZyZW9wZW4oImlucHV0LnR4dCIsICJyIiwgc3RkaW4pOwoJZnJlb3Blbigib3V0cHV0LnR4dCIsICJ3Iiwgc3Rkb3V0KTsKI2Vsc2UKCS8vZnJlb3BlbigicG9pbnRzLmluIiwgInIiLCBzdGRpbik7CgkvL2ZyZW9wZW4oInBvaW50cy5vdXQiLCAidyIsIHN0ZG91dCk7CiNlbmRpZgoKCXVzZWlvc3RyZWFtKCk7CgljaW4gPj4gbiA+PiBtOwoJZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspIHsKCQlmb3IgKGludCBqID0gMDsgaiA8IG07IGorKykgewoJCQlpbnQgYTsKCQkJY2luID4+IGE7CgkJCWZvciAoaW50IGsgPSAwOyBrIDwgMTA7IGsrKykgewoJCQkJYXJyW2ldW2pdW2tdID0gKChhICYgKDEgPDwgaykpICE9IDApOwoJCQkJY250W2ldW2tdKz0gYXJyW2ldW2pdW2tdOwoJCQl9CgkJfQoJfQoKCWZvciAoaW50IGsgPSAwOyBrIDwgMTA7IGsrKykgewoJCXZlY3RvcjxpbnQ+IHBzKG4pOwoJCXZlY3RvcjxpbnQ+IHJlcyhuKTsKCQlmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKylwc1tpXSA9IGk7CgkJc29ydChhbGwocHMpLCBbJl0oaW50IGwsIGludCByKSB7cmV0dXJuIGNudFtsXVtrXSA+IGNudFtyXVtrXTsgfSk7CgkJaW50IGN0ID0gMDsKCQlpbnQgbGFzdCA9IC0xOwoJCWZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKSB7CgkJCWlmIChjbnRbcHNbaV1dW2tdID09IG0pIHsKCQkJCWN0Kys7CgkJCQlsYXN0ID0gaTsKCQkJfQoJCX0KCQlpZiAoY3QgJiAxKSB7CgkJCWNvdXQgPDwgIlRBS1xuIjsKCQkJZm9yIChpbnQgaSA9IDA7IGkgPD0gbGFzdDsgaSsrKSB7CgkJCQlyZXNbcHNbaV1dID0gMTsKCQkJfQoJCQlmb3IgKGludCBpID0gbGFzdCArIDE7IGkgPCBuOyBpKyspIHsKCQkJCWZvciAoaW50IGogPSAwOyBqIDwgbTsgaisrKSB7CgkJCQkJaWYgKGFycltwc1tpXV1bal1ba10gPT0gMClyZXNbcHNbaV1dID0gaiArIDE7CgkJCQl9CgkJCX0KCQkJZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspIHsKCQkJCWNvdXQgPDwgcmVzW2ldIDw8ICIgIjsKCQkJfQoJCQlyZXR1cm4gMDsKCQl9CgkJZWxzZSB7CgkJCWZvciAoaW50IGkgPSBsYXN0ICsgMTsgaSA8IG4gJiYgKGN0ICUgMiApPT0gMDsgaSsrKSB7CgkJCQlpZiAoY250W3BzW2ldXVtrXSkgewoJCQkJCWZvciAoaW50IGogPSAwOyBqIDwgbTsgaisrKWlmIChhcnJbcHNbaV1dW2pdW2tdKSB7CgkJCQkJCWN0Kys7CgkJCQkJCQoJCQkJCQlicmVhazsKCQkJCQl9CgkJCQl9CgkJCX0KCQkJaWYgKGN0ICYgMSkgewoJCQkJY291dCA8PCAiVEFLXG4iOwoJCQkJZm9yIChpbnQgaSA9IDA7IGkgPD0gbGFzdDsgaSsrKSB7CgkJCQkJcmVzW3BzW2ldXSA9IDE7CgkJCQl9CgkJCQlib29sIGdvdCA9IDA7CgkJCQlmb3IgKGludCBpID0gbGFzdCArIDE7IGkgPCBuOyBpKyspIHsKCQkJCQlpZiAoY250W3BzW2ldXVtrXSAmJiAhZ290KSB7CgkJCQkJCWdvdCA9IDE7CgkJCQkJCWZvciAoaW50IGogPSAwOyBqIDwgbTsgaisrKWlmIChhcnJbcHNbaV1dW2pdW2tdKXJlc1twc1tpXV0gPSBqICsgMTsKCQkJCQl9CgkJCQkJZWxzZSB7CgkJCQkJCWZvciAoaW50IGogPSAwOyBqIDwgbTsgaisrKWlmIChhcnJbcHNbaV1dW2pdW2tdID09IDApcmVzW3BzW2ldXSA9IGogKyAxOwoJCQkJCX0KCQkJCX0KCQkJCWZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKSB7CgkJCQkJY291dCA8PCByZXNbaV0gPDwgIiAiOwoJCQkJfQoJCQkJcmV0dXJuIDA7CgkJCX0KCQl9Cgl9CgoJY291dCA8PCAiTklFIjsKCXJldHVybiAwOwp9