#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; using ll = long long; constexpr int INF = 1001001001; // constexpr int mod = 1000000007; constexpr int mod = 998244353; template inline bool chmax(T& x, T y){ if(x < y){ x = y; return true; } return false; } template inline bool chmin(T& x, T y){ if(x > y){ x = y; return true; } return false; } int dp[14][14][14][14][27][27][2]; int main(){ ios::sync_with_stdio(false); cin.tie(nullptr); vector N(4); for(int i = 0; i < 4; ++i) cin >> N[i]; for(int a = 0; a <= 13; ++a){ for(int b = 0; b <= 13; ++b){ for(int c = 0; c <= 13; ++c){ for(int d = 0; d <= 13; ++d){ for(int e = 0; e <= 26; ++e){ for(int f = 0; f <= 26; ++f){ for(int g = 0; g <= 1; ++g){ dp[a][b][c][d][e][f][g] = -1; } } } } } } } auto func = [&](auto&& self, vector card, vector score, int t) -> int { if(dp[card[0]][card[1]][card[2]][card[3]][score[0]][score[1]][t] != -1){ return dp[card[0]][card[1]][card[2]][card[3]][score[0]][score[1]][t]; } if(card[0] + card[1] + card[2] + card[3] == 0){ return dp[0][0][0][0][score[0]][score[1]][t] = (score[0] > score[1]) ^ t; } int res = 1; for(int i = 0; i < 4; ++i){ for(int j = 1; j <= 3; ++j){ if(card[i] - j >= 0){ card[i] -= j; score[t] += j; if(card[i] - j > 0){ res &= self(self, card, score, t ^ 1); } else{ int delta = (score[t ^ 1] + 1) / 2; score[t] += delta; score[t ^ 1] -= delta; res &= self(self, card, score, t ^ 1); score[t] -= delta; score[t ^ 1] += delta; } card[i] += j; score[t] -= j; } } } return dp[card[0]][card[1]][card[2]][card[3]][score[0]][score[1]][t] = res ^ 1; }; cout << (func(func, N, {0, 0}, 0) ? "Taro" : "Jiro") << endl; return 0; }