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
118
#include <bits/stdc++.h>
using namespace std;

typedef long long LL;
typedef long double LD;
typedef unsigned long long ULL;
typedef vector<int> VI;
typedef set<int> SI;
typedef multiset<int> MI;
typedef pair<int, int> PII;
typedef vector<pair<int, int> > VPII;

const int INF = 1000000001;
const LD EPS = 1e-9;
const int MOD = 1000000007;
const LL LLINF = 1000000000000000001;

//813437586

#define FOR(i, b, e) for(int i = b; i <= e; i++)
#define FORD(i, b, e) for(int i = b; i >= e; i--)
#define ALL(c) (c).begin(), (c).end()
#define SIZE(x) ((int)(x).size())
#define VAR(v, n) auto v = (n)
#define FOREACH(i, c) for(VAR(i, (c).begin()); i != (c).end(); ++i)

#define MP make_pair
#define PB push_back
#define ST first
#define ND second
#define GGL(x) "Case #" << x << ": "


/*************************** END OF TEMPLATE ***************************/

const int MAXN = 100000;
const int MAXS = 20000000;

string Temp;
LL Pot[MAXN+5];
LL Hasz1, Hasz2;

int To_Int(char a)
{
	return (int)a - 96;
}

LL Potega(LL i)
{
	if (i <= MAXN)	return Pot[i];
	if (i%2 == 0)
	{
		LL To = Potega(i/2);
		return (To * To) % MOD;
	}
	return (29 * Potega(i-1)) % MOD;
}

int main()
{
	int n;
	scanf ("%d\n", &n);
//	ios_base::sync_with_stdio(false);
//	cin.tie(0);
	
	Pot[0] = 1;
	FOR (i, 1, MAXN)	Pot[i] = (Pot[i-1] * 29) % MOD;
	
	char a;
	LL i = 1;
	LL j = MAXS + 5;
	LL Tera = 29;
	a = 'g';
	while (true)
	{
		if (scanf("%c", &a) != 1)	break;
//		if (i < 10)	cout << (int)a << endl;
		if (a == 10)	break;
		Temp += a;
//		printf ("%c : Pot[%d]\n", a, i);
		Hasz1 += (Tera * To_Int(a)) % MOD;
		Hasz1 %= MOD;
		Tera = (Tera * 29) % MOD;
		
		if (Temp.length() == MAXN)
		{
			LL Tera2 = Potega(j);
			FORD (k, Temp.length()-1, 0)
			{
				Hasz2 += (Tera2 * To_Int(Temp[k])) % MOD;
				Hasz2 %= MOD;
				Tera2 = (Tera2 * 29) % MOD;
			}
			Temp = "";
		}
		i++;
		j--;
	}
	
	LL Tera2 = Potega(j+1);
	int Licz = 0;
//	printf ("* %d\n\n\n", j);
	FORD (k, Temp.length()-1, 0)
	{
//		printf ("%c : Pot[%d]\n", Temp[k], j+Licz);
		Licz++;
		Hasz2 += (Tera2 * To_Int(Temp[k])) % MOD;
		Hasz2 %= MOD;
		Tera2 = (Tera2 * 29) % MOD;
	}
	Temp = "";
	
	Hasz1 = (Hasz1 * Potega(j)) % MOD;
	if (Hasz1 == Hasz2)	cout << "TAK\n";
	else	cout << "NIE\n";

//	cout << Hasz1 << "\n" << Hasz2;
}