#include <bits/stdc++.h>
#define REP(i,n) for(int i=0; i<(int)(n); ++i)

using namespace std;
int N;
int G[1000][1000];
bool used[1000];
void dfs(int u) {
    if(used[u]) return;
    used[u] = true;
    REP(i, N) if(G[u][i] && !used[i]) dfs(i);
}

char memo[1010][1010][2][2];
int rec(int odd, int even, int t, int p) {
    if(odd + even == 2) {
        return p == 0;
    } else {
        char& res = memo[odd][even][t][p];
        if(res != -1) return res;

        if(odd - 2 >= 0 && !rec(odd - 2, even + 1, t ^ 1, p ^ 1)) return res = true;
        if(even - 2 >= 0 && !rec(odd, even - 1, t ^ 1, p)) return res = true;
        if(odd - 1 >= 0 && even - 1 >= 0 && !rec(odd, even - 1, t ^ 1, p)) return res = true;
        return res = false;
    }
}


int main(){
    while(cin >> N) {
        REP(i, N) {
            string s;
            cin >> s;
            REP(j, N) G[i][j] = s[j] == 'Y';
        }
        int odd = 0, even = 0;
        int E = 0;
        bool fill[1010] = {};
        REP(i, N) if(!fill[i]) {
            memset(used, 0, sizeof(used));
            dfs(i);
            vector<int> vs;
            REP(j, N) if(used[j]) {
                fill[j] = true;
                vs.push_back(j);
            }
            for(int u : vs) for(int v : vs) if(u < v && !G[u][v]) {
                E++;
            }
            if(vs.size() % 2 == 0) {
                even ++;
            } else {
                odd ++;
            }
        }

        E += (odd + even) - 1;

        //printf("odd = %d even = %d E = %d\n", odd, even, E);

        memset(memo, -1, sizeof(memo));
        if(rec(odd, even, 0, E % 2)) {
            cout << "Taro" << endl;
        } else {
            cout << "Hanako" << endl;
        }
    }
    return 0;
}