#include <algorithm>
#include <bitset>
#include <cmath>
#include <iomanip>
#include <iostream>
#include <set>
#include <sstream>
#include <queue>
#include <unordered_map>
#include <unordered_set>
#include <vector>

#define rep(i, n) for (int i = 0; i < n; ++i)
#define reps(i, s, n) for (int i = s; i < n; i++)
#define debug(s, param) std::cerr << s << param << std::endl;

using namespace std;
using ll = long long;
using pi = pair<int, int>;
using pl = pair<ll, ll>;

const int INF = 1e9;
const ll INFL = 1e18;
const ll MOD = 1000000007;

int f(const vector<vector<int>>& board, vector<vector<int>>& cache, int row, int col) {
  int h = board.size(), w = board[0].size();
  if (row == h - 1 && col == w - 1) return 0;
  if (cache[row][col] != -1) return cache[row][col];
  bool takahashi = (row + col) % 2 == 0 ? true : false;
  int res = takahashi ? -INF : INF;
  if (takahashi) {
    if (row < h - 1) res = max(res, f(board, cache, row + 1, col) + board[row+1][col]);
    if (col < w - 1) res = max(res, f(board, cache, row, col + 1) + board[row][col+1]);
  } else {
    if (row < h - 1) res = min(res, f(board, cache, row + 1, col) - board[row+1][col]);
    if (col < w - 1) res = min(res, f(board, cache, row, col + 1) - board[row][col+1]);
  }
  cache[row][col] = res;
  return res;
}

int main() {
  int h, w; cin >> h >> w;
  vector<vector<int>> board(h, vector<int>(w));
  rep (row, h) {
    string s; cin >> s;
    rep (col, w) {
      if (s[col] == '+') board[row][col] = 1;
      else board[row][col] = -1;
    }
  }
  vector<vector<int>> cache(h, vector<int>(w, -1));
  int ans = f(board, cache, 0, 0);
  if (ans > 0) cout << "Takahashi" << endl;
  else if (ans < 0) cout << "Aoki" << endl;
  else cout << "Draw" << endl;
  return 0;
}
#include <iostream>

void print_mat(int h, int w, int* mat){
    for(int i=0; i<h; i++){
        for(int j=0; j<w; j++){
            std::cout << mat[i*w + j] << " ";
        }
        std::cout << std::endl;
    }
}


int main(){
    int h, w;
    std::cin >> h >> w;

    bool* map = new bool[h*w];
    int* dp = new int[h*w];
    
    for(int i=0; i<h*w; ++i){
        char c;
        std::cin >> c;
        map[i] = (c=='+');
    }
    if(map[h*w -1]){
        dp[h*w -1] = -1;
    }else {
        dp[h*w -1] = 1;
    }

    for(int sum=h+w-3; 0<=sum; --sum){
        for(int i=std::max(0, sum-w+1); i<std::min(h, sum+1); ++i){
            int j = sum - i;
            int index = w*i + j;
            int val;
            if(i==h-1){
                val = dp[index+1];
            }else if(j==w-1){
                val = dp[index+w];
            }else{
                val = std::min(dp[index+1], dp[index + w]);
            }
            if(map[index]){
                val = -1 - val;
            }else{
                val = 1 -val;
            }
            dp[index] = val;
        }
    }
    int res = dp[0];
    if(map[0]){
        res += 1;
    }else{
        res -= 1;
    }

    if(res > 0){
        std::cout << "Takahashi\n";
    }else if(res==0){
        std::cout << "Draw\n";
    }else{
        std::cout << "Aoki\n";
    }
    // print_mat(h, w, dp);
}


