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
#include <cstdio>
#include <bitset>
#include <iostream>
using namespace std;

int n = 0;
int chars_written = 0;
bitset<100000000> bits;

bool idx_equal_char(int idx, char a) {
	//cout << "checking: " << idx << ", for: " << a<< endl;
	int ia = a - 'a';
	int k = 0;
	while (ia > 0) {
		if (bits[idx*5 + k] != (ia & 1)) {
			cout << "found diff at "<< k << ", " << bits[idx*5 + k]<< ", "<< (ia & 1) << endl;
			return false;
		}
		ia = ia >> 1;
		k ++;
	}
	return true;
}

bool idx_equal(int idx1, int idx2) {
	for (int k=0; k <5; k++) {
		if (bits[idx1*5 + k] != bits[idx2*5+k]) {
			return false;
		}
	}
	return true;
}

void write_and_shift(char a) {
	int ia = a - 'a';
	int k = 0;
	while (ia > 0) {
		bits.set(chars_written*5 + k, ia & 1);
		ia = ia >> 1;
		k ++;
	}
	chars_written ++;
}

void read() {
	char a;
	scanf("%ld\n", &n);
	if (n == 0) {
		while(cin >> a) {
			write_and_shift(a);
		}
	} else {

		for (int i =0; i<n / 2; i++) {
		    cin >> a;
			write_and_shift(a);
		  //  cout << "read: "<< a << ", chars_written=" << chars_written << endl;
		  //  cout << bits << endl;
		}
		if (n % 2 == 1) {
			cin >> a;
		}
	}
}

bool is_palindrom() {
	if (n == 0) {
		for (int i=0; i<chars_written / 2; i++) {
			if (!idx_equal(i, chars_written - i - 1)) {
				return false;
			}
		}
	} else {
		int indb = 0;
		char a;
		for (int i =0; i<n/2; i++) {
		    cin >> a;
		  //  cout << "read verify: " << a << endl;
		    if (!idx_equal_char(chars_written - indb - 1, a)) {
		    	return false;
		    }
		    indb ++;
		}
	}
	return true;
}

int main() {
  read();
  bool result = is_palindrom();
 // cout << bits << endl;
  if (result) {
	  printf("TAK\n");
  } else {
	  printf("NIE\n");
  }
  return 0;
}