from functools import lru_cache import sys sys.setrecursionlimit(1000000) def main(): n = list(map(int, input().split())) piles = tuple(n) result = evaluate(piles, 0, 0, 'Taro') print(result) @lru_cache(maxsize=None) def evaluate(piles, t, j, turn): total = sum(piles) if total == 0: if t > j: return 'Taro' elif j > t: return 'Jiro' else: return 'Draw' possible_outcomes = [] for i in range(4): if piles[i] == 0: continue for take in range(1, 4): if take > piles[i]: continue new_piles = list(piles) new_piles[i] -= take new_piles = tuple(new_piles) last_card = (new_piles[i] == 0) if turn == 'Taro': new_t = t + take new_j = j if last_card: steal = (new_j + 1) // 2 new_t += steal new_j -= steal next_turn = 'Jiro' else: new_j = j + take new_t = t if last_card: steal = (new_t + 1) // 2 new_j += steal new_t -= steal next_turn = 'Taro' outcome = evaluate(new_piles, new_t, new_j, next_turn) possible_outcomes.append(outcome) if turn == 'Taro': if any(out == 'Taro' for out in possible_outcomes): return 'Taro' if any(out == 'Draw' for out in possible_outcomes): return 'Draw' return 'Jiro' else: if any(out == 'Jiro' for out in possible_outcomes): return 'Jiro' if any(out == 'Draw' for out in possible_outcomes): return 'Draw' return 'Taro' if __name__ == '__main__': main()