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
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>
#include <time.h>
#include <algorithm>
#include <bitset>
#include <fstream>
#include <iomanip>
#include <iostream>
#include <list>
#include <map>
#include <numeric>
#include <queue>
#include <set>
#include <stack>
#include <vector>

using namespace std;

// debugging stuff {{{
#ifdef DEBUG
  #define bDebug 1
  #define bDebug2 0
#else
  #define bDebug 0
  #define bDebug2 0
#endif
#define deb(a) #a << "=" << (a) << " "
#ifndef HOME
  #define assert(a) {}
#endif

template<class T> ostream& operator<<(ostream& os, vector<T> v) //{{{
{
  for(int i=0; i<v.size(); i++)
    os << v[i] << " ";
  os << endl;
  return os;
}  //}}}
// }}} end of debugging stuff

//c++11
#define typeof __typeof__

#define array(a, type, count) type *a = (type*)calloc(sizeof(type), count)
#define eps 1e-9
#define eq(a, b) ( (a) > (b) - eps && (a) < (b) + eps )
#define eraseAll(v) v.erase(v.begin(), v.end())
#define fi first
#define rep(i,n) for(long i=0; i<(n); i++)
#define rep2(i,a,b) for(long i=(a); i<=(b); i++)
#define rep2d(i,a,b) for(long i=(a); i>=(b); i--)
#define zeroMem(a) memset(a, 0, sizeof(a))
#define zeroMem2(a, n) memset(a, 0, sizeof(*a) * n)
#define fore(it,L) for(typeof(L.begin()) it=L.begin(); it!=L.end(); it++)
#define eraseAll(v) v.erase(v.begin(), v.end())
#define se second
#define setMin(a,b) { typeof(a) rv = (b); if (rv < a) a = rv; }
#define setMinP(a,b) { typeof(a) rv = (b); \
                       if (rv >= 0 && (a < 0 || rv < a)) a = rv; }
#define setMax(a,b) { typeof(a) rv = (b); if (rv > a) a = rv; } 
#define swap(a,b) { typeof(a) swapVar = a; a = b; b = swapVar; }
#define Int long long

#define _CRT_SECURE_NO_WARNINGS
#pragma warning(suppress : 4996)

//*********************** SOLUTION    ******************************
#define N 20000000L
#define A 27
#define C 2
Int asum1[C];
Int asum2[C];
Int ap[C] = { 179426173LL, 179426363LL };
Int apot[C];

int main (int argc, char **args)
{
  #ifdef HOME
  if (argc > 1) {
    freopen("testy/pal/0", "r", stdin);
  }
  #endif
  cin.sync_with_stdio(false);
  cout.sync_with_stdio(false);
  char buf[50];
  scanf("%s", buf);
  rep(i, C) {
    asum1[i] = asum2[i] = (Int)0;
    apot[i] = 1;
  }
  long n = 0;
  while (true) {
    char ch;
    if (scanf("%c", &ch) != 1)
      break;
    if (!(ch >= 'a' && ch <= 'z'))
      continue;
    Int d = ch - 'a';
    n++;
    rep(i, C) {
      asum1[i] = (asum1[i] * A + d) % ap[i];
      asum2[i] = (apot[i] * d + asum2[i]) % ap[i];
      apot[i] = (apot[i] * A) % ap[i];
    }
  }
  bool ok = true;
  rep(i, C) {
    if (asum1[i] != asum2[i])
      ok = false;
  }
  cout << (ok ? "TAK" : "NIE") << endl;
}