#include <algorithm>
#include <bitset>
#include <cassert>
#include <cctype>
#include <complex>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <cstring>
#include <ctime>
#include <fstream>
#include <iomanip>
#include <iostream>
#include <limits>
#include <map>
#include <numeric>
#include <queue>
#include <set>
#include <stack>
#include <sstream>
#include <vector>
using namespace std;

#define REP2(i, m, n) for(int i = (int)(m); i < (int)(n); i++)
#define REP(i, n) REP2(i, 0, n)
#define ALL(c) (c).begin(), (c).end()
#define FOREACH(i, c) for(auto i = (c).begin(); i != (c).end(); ++i)
#define BIT(n, m) (((n) >> (m)) & 1)

typedef long long ll;
typedef pair<int, int> PI;

const ll inf = 1e15;
const ll mod = 1000 * 1000 * 1000 + 7;
const double eps = 1e-9;

template <typename S, typename T> ostream &operator<<(ostream &out, const pair<S, T> &p) {
  out << "(" << p.first << ", " << p.second << ")";
  return out;
}

template <typename T> ostream &operator<<(ostream &out, const vector<T> &v) {
  out << "[";
  REP(i, v.size()){
    if (i > 0) out << ", ";
    out << v[i];
  }
  out << "]";
  return out;
}

int memo[2][1010][1010];

int rec(int p, int o, int e){
  if (o + e == 2){
    // cout << p << " " << o << " " << e << " " << (1 - 2 * ((o == 2) ^ p)) << endl;
    return (1 - 2 * ((o != 2) ^ p));
  } else if (memo[p][o][e] != 0){
    return memo[p][o][e];
  } else {
    int &res = memo[p][o][e] = -1;
    if (o > 1) res = max(res, -rec(1 - p, o - 2, e + 1));
    if (e > 1) res = max(res, -rec(1 - p, o, e - 1));
    if (o > 0 && e > 0) res = max(res, -rec(1 - p, o, e - 1));
    // cout << p << " " << o << " " << e << " " << res << endl;
    return res;
  }
}

int main(){
  int V;
  char A[1010];
  while (cin >> V){
    int E = 0;
    vector<vector<int> > G(V);
    REP(i, V){
      scanf(" %s", A);
      REP(j, V) if (A[j] == 'Y'){
        G[i].push_back(j);
        E++;
      }
    }

    int even = 0;
    int odd  = 0;
    vector<int> visit(V);
    REP(i, V) if (!visit[i]){
      int count = 0;
      visit[i] = true;
      queue<int> que;
      que.push(i);
      while (!que.empty()){
        int v = que.front(); que.pop();
        count++;
        for (int w : G[v]){
          if (!visit[w]){
            visit[w] = true;
            que.push(w);
          }
        }
      }
      (count % 2 ? odd : even) += 1;
    }
    E /= 2;
    int p = (V * (V - 1) / 2 - E) % 2;
    // cout << p << " " << odd << " " << even << endl;
    cout << (rec(p, odd, even) >= 0? "Taro" : "Hanako") << endl;
  }
  return 0;
}