Problem: Let's call a string "s-palindrome" if it is symmetric about the middle of the string. For example, the string "oHo" is "s-palindrome", but the string "aa" is not. The string "aa" is not "s-palindrome", because the second half of it is not a mirror reflection of the first half.

<image> English alphabet

You are given a string s. Check if the string is "s-palindrome".

Input

The only line contains the string s (1 ≤ |s| ≤ 1000) which consists of only English letters.

Output

Print "TAK" if the string s is "s-palindrome" and "NIE" otherwise.

Examples

Input

oXoxoXo


Output

TAK


Input

bod


Output

TAK


Input

ER


Output

NIE

Solution (in CPP):

Solution:
#include <bits/stdc++.h>
using namespace std;
void bad(string mes = "Impossible") {
  cout << mes;
  exit(0);
}
template <typename... T>
void shit(T&... x) {}
template <typename... T>
void dec(T&... x) {
  shit(--x...);
}
template <typename... T>
void inc(T&... x) {
  shit(++x...);
}
template <typename T>
string bin(T x, int st = 2) {
  string ans = "";
  while (x > 0) {
    ans += char('0' + x % st);
    x /= st;
  }
  reverse(ans.begin(), ans.end());
  return ans.empty() ? "0" : ans;
}
template <typename T>
T input() {
  T ans = 0, m = 1;
  char c = ' ';
  int len = 0;
  while (!(c >= '0' && c <= '9') || c == '-') {
    c = getchar();
  }
  if (c == '-') m = -1, c = getchar();
  while (c >= '0' && c <= '9') {
    ans = ans * 10 + (c - '0'), c = getchar();
  }
  return ans * m;
}
template <typename T>
void read(T& a) {
  a = input<T>();
}
template <typename T>
void read(T& a, T& b) {
  read(a), read(b);
}
template <typename T>
void read(T& a, T& b, T& c) {
  read(a, b), read(c);
}
template <typename T>
void read(T& a, T& b, T& c, T& d) {
  read(a, b), read(c, d);
}
const int inf = 1e9;
const double eps = 1e-9;
const int maxn = 3e6 + 5, base = 1e9 + 7;
const int sigm = 26;
const long long llinf = 1e18 + 1;
template <typename T>
T binpow(T n, T second) {
  if (second <= 0) return 1LL;
  if (second % 2 == 0) {
    T b = binpow(n, second / 2);
    return (1LL * b * b) % base;
  } else {
    return (1LL * binpow(n, second - 1) * n) % base;
  }
}
map<char, char> sym;
void init() {
  sym['A'] = 'A';
  sym['b'] = 'd';
  sym['d'] = 'b';
  sym['H'] = 'H';
  sym['I'] = 'I';
  sym['M'] = 'M';
  sym['O'] = 'O';
  sym['o'] = 'o';
  sym['p'] = 'q';
  sym['q'] = 'p';
  sym['T'] = 'T';
  sym['U'] = 'U';
  sym['V'] = 'V';
  sym['v'] = 'v';
  sym['W'] = 'W';
  sym['w'] = 'w';
  sym['X'] = 'X';
  sym['x'] = 'x';
  sym['Y'] = 'Y';
}
int main() {
  init();
  string second;
  bool flag = 1;
  cin >> second;
  for (int l = 0, r = second.size() - 1; l <= r; l++, r--)
    if (sym[second[l]] != second[r]) flag = 0;
  puts(flag ? "TAK" : "NIE");
  return 0;
}