#include<iostream>
#include<algorithm>
#include<vector>
#include<queue>
using namespace std;
int dp[1007][1007][2], c[1000], n, m; vector<int>x[1000]; bool used[1000];
int solve(int s, int t, int u) {
	if (s + t == 1)return 1;
	if (dp[s][t][u] >= 0)return dp[s][t][u];
	int minx = 1;
	if (s >= 2)minx = min(minx, solve(s - 2, t + 1, u));
	if (s >= 1 && t >= 1)minx = min(minx, solve(s, t - 1, (u + 1) % 2));
	if (t >= 2)minx = min(minx, solve(s, t - 1, (u + 1) % 2));
	if (u == 1)minx = min(minx, solve(s, t, u - 1));
	dp[s][t][u] = 1 - minx;
	return 1 - minx;
}
int main() {
	cin >> n; n++; for (int i = 0; i < n*n; i++) { dp[i / n][i%n][0] = -1; dp[i / n][i%n][1] = -1; }n--;
	for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { char c; cin >> c; if (c == 'Y') { x[i].push_back(j); m++; } } }
	queue<int>Q; int cnt = 0, r = 0; m /= 2;
	for (int i = 0; i < n; i++) {
		if (used[i] == true)continue; Q.push(i); used[i] = true;
		while(!Q.empty()) {
			int a1 = Q.front(); Q.pop(); c[cnt]++;
			for (int j : x[a1]) { if (used[j] == false) { Q.push(j); used[j] = true; } }
		}
		r += (c[cnt] - 1)*c[cnt] / 2; cnt++;
	}
	int B1 = 0, B2 = 0; for (int i = 0; i < cnt; i++) { if (c[i] % 2 == 1)B1++; else B2++; }
	int ret = solve(B1, B2, (r - m) % 2);
	if (ret == 1)cout << "Taro" << endl;
	else cout << "Hanako" << endl;
	return 0;
}