#include <bits/stdc++.h>
#define int long long
#define N 1001
using namespace std;
const int INF = 1LL<<55;
const int mod = (1e9)+7;
const double EPS = 1e-8;
const double PI = 6.0 * asin(0.5);
template<class T> T Max(T &a,T b){return a=max(a,b);}
template<class T> T Min(T &a,T b){return a=min(a,b);}
typedef pair<int,int> P;
int n;
char G[N][N];

typedef pair<P,int>PP;
int getIdx(const vector<PP>&V,PP &a,PP &b){
  int f = (a.first.first + b.first.first)%4;
  int s = (a.first.second + b.first.second+1)%2;
  for(int i=0;i<(int)V.size();i++)  if(V[i].first == P(f,s)) return i;
  assert(0);
}

int judge(vector<PP> sta,int turn){
  vector<P> v;
  for(PP p:sta) while(p.second--) v.push_back(p.first);
  assert((int)v.size()==2);
  P a = v[0], b = v[1];
  return
    turn ^ a.second ^ b.second ^
    (a.first==2 || a.first == 3) ^
    (b.first==2 || b.first == 3);
}

map<vector<PP>,bool> mem;
int dfs(vector<PP> sta,int turn){
  int sum = 0;
  for(PP p:sta) sum += p.second;
  if(sum == 2) return judge(sta,turn);
  if(mem.count(sta)) return mem[sta];

  int res = turn;
  for(PP &a:sta)
    for(PP &b:sta){
      a.second--; b.second--;
      if(a.second < 0 || b.second < 0) {a.second++;b.second++;continue;}
      int idx = getIdx(sta,a,b); sta[idx].second++;
      int result = dfs(sta,!turn);
      turn == 0? (res |= result):(res &= result);
      a.second++, b.second++, sta[idx].second--;
    }
  return mem[sta] = res;
}

void visit(int pos,int num,vector<int> &used,vector<int> &par){
  par[pos] = num;
  if(used[pos]++) return;
  for(int to=0;to<n;to++) if(G[pos][to]=='Y') visit(to,num,used,par);
}

vector<PP> prepare(){
  vector<int> par(n),used(n,0);
  int cnt = 0;
  for(int i=0;i<n;i++) if(used[i] == 0) visit(i,cnt++,used,par);

  vector<P> A(cnt,P(0,0)); //nodes,edges;
  for(int i=0;i<n;i++){
    A[par[i]].first++;
    for(int j=0;j<n;j++) A[par[i]].second+=G[i][j] == 'Y';
  }
 
  //for(P &a:A) cout<<a.first<<" "<<a.second<<endl; 
  for(P &a:A) a.first%=4, a.second=(a.second/2)%2;
  
  map<P,int> M;
  for(int i=0;i<4;i++)
    for(int j=0;j<2;j++) M[P(i,j)] = 0;
  for(P a:A) M[a]++,M[a]%=4;
  vector<PP> V;
  for(PP m:M) V.push_back(m);
  return V;
}


signed main(){
  cin >> n;
  for(int i=0;i<n;i++)
    for(int j=0;j<n;j++) cin>>G[i][j];
  
  vector<PP> v = prepare();
  int ans = dfs(v,0);
  cout<<(ans?"Taro":"Hanako")<<endl;
  return 0;
}