#include <cstdio>
#include <cstring>
#include <vector>
#include <queue>
#include <string>
#include <algorithm>
#include <iostream>
#include <string>
#include <map>
#include <set>
#include <functional>
#include <iostream>
#define MOD 1000000007LL
using namespace std;
typedef long long ll;
typedef pair<int,int> P;

int n;
vector<int> G[1001];
int vcnt,mcnt,a,b,c2;
bool used[1001];
int dp[1001][1001][2];


void dfs(int v){
	used[v]=true;
	vcnt++;
	mcnt+=G[v].size();
	for(int i=0;i<G[v].size();i++){
		if(!used[G[v][i]]){
			dfs(G[v][i]);
		}
	}
}

int func(int a,int b,int c){
	if(a+b<=1)return 1;
	if(dp[a][b][c]!=-1)return dp[a][b][c];
	int res=0;
	if(c>0){
		res|=1^func(a,b,c-1);
	}
	if(a>0 && b>0){
		res|=1^func(a,b-1,c^1);
	}
	if(a>1){
		res|=1^func(a-2,b+1,c);
	}
	if(b>1){
		res|=1^func(a,b-1,c^1);
	}
	return (dp[a][b][c]=res);
}

int main(void){
	int m=0;
	scanf("%d%*c",&n);
	for(int i=0;i<n;i++){
		for(int j=0;j<n;j++){
			char c;
			scanf("%c",&c);
			if(c=='Y'){
				G[i].push_back(j);
				m++;
			}
		}
		scanf("%*c");
	}
	memset(used,false,sizeof(used));
	for(int i=0;i<n;i++){
		if(!used[i]){
			mcnt=0;
			vcnt=0;
			dfs(i);
			if(vcnt%2==1)a++;
			else b++;
			if((vcnt*(vcnt-1)/2-(mcnt/2))%2==1){
				c2^=1;
			}
		}
	}
	memset(dp,-1,sizeof(dp));
	printf("%s\n",func(a,b,c2)==1?"Taro":"Hanako");
	return 0;
}