#include <iostream>

using namespace std;
int par[100010],sz[100010];
void init(int n){
	for(int i=0;i<n;i++){
		par[i] = i; sz[i] = 1;
	}
}
int find(int x){
	if(par[x]==x) return x;
	return par[x] = find(par[x]);
}
void unite(int x, int y){
	x = find(x); y = find(y);
	if(x==y) return;
	if(sz[x]>sz[y]) swap(x,y);
	par[x] = y;
	sz[y] += sz[x];
}
int dp[1010][1010][2];
int dfs(int x,int y,int z){
    if(x<0 || y<0) return 0;
    if(dp[x][y][z]!=-1) return dp[x][y][z];
    int cnt = dfs(x - 2,y + 1,z) + dfs(x,y - 1,1 - z) + dfs(x,y - 1,1 - z);
    if(cnt==0) return dp[x][y][z] = 1;
    return dp[x][y][z] = 0;
}

int main(){
    int i,j,v,cnt = 0;
    cin >> v;
    init(v);
    for(i=0;i<v;i++){
        for(j=0;j<v;j++){
            char c; cin >> c;
            if(c=='Y'){
                unite(i,j);
                cnt--;
            }
        }
    }
    cnt /= 2;
    for(i=0;i<=v;i++){
        for(j=0;j<=v;j++){
            dp[i][j][0] = -1; dp[i][j][1] = -1;
        }
    }
    dp[2][0][1] = 0; dp[1][1][1] = 0; dp[0][2][1] = 0;
    dp[2][0][0] = 1; dp[1][1][0] = 1; dp[0][2][0] = 1;
    int od = 0,ev = 0;
    for(i=0;i<v;i++){
        if(par[i]==i){
            if(sz[i]&1) od++;
            else ev++;
            cnt += sz[i]*(sz[i] - 1)/2;
        }
    }
    if(!dfs(od,ev,(cnt&1))) cout << "Taro" << endl;
    else cout << "Hanako" << endl;
}
