#include<bits/stdc++.h>
using namespace std;
const int MAX = 2010;
const int INF = 1e9;
bool seen[MAX][MAX];
int dp[MAX][MAX];
int H, W;

int add(char x){
  if(x == '+'){
    return 1;
  }
  else{
    return -1;
  }
}

int dfs(int h, int w, vector<vector<char>> &vec){
  if(seen[h][w]){
    return dp[h][w];
  }
  int a = -INF;
  int b = -INF;
  if(h < H-1){
    a = dfs(h+1,w,vec);
    if((h+1+w)%2 == 0){
      a -= add(vec[h+1][w]);
    }
    else{
      a += add(vec[h+1][w]);
    }
  }
  if(w < W-1){
    b = dfs(h,w+1,vec);
    if((h+1+w)%2 == 0){
      b -= add(vec[h][w+1]);
    }
    else{
      b += add(vec[h][w+1]);
    }
  }
  seen[h][w] = true;
  if((h+w)%2 == 0){
    dp[h][w] = max(a,b);
  }
  else{
    if(a == -INF){
      a = b;
    }
    else if(b == -INF){
      b = a;
    }
    dp[h][w] = min(a,b);
  }
  return dp[h][w];
}
  

int main(){
  cin >> H >> W;
  vector<vector<char>> vec(H,vector<char>(W));
  for(int i=0; i<H; i++){
    for(int j=0; j<W; j++){
      cin >> vec[i][j];
    }
  }
  seen[H-1][W-1] = true;
  dfs(0,0,vec);
  if(dp[0][0] > 0){
    cout << "Takahashi" << endl;
  }
  else if(dp[0][0] < 0){
    cout << "Aoki" << endl;
  }
  else{
    cout << "Draw" << endl;
  }
  //cout << dp[0][0] << endl;
}
#include <bits/stdc++.h>
//#include <atcoder/all>
#ifndef LOCAL
#pragma GCC target("arch=skylake-avx512")
#pragma GCC optimize("O3")
#pragma GCC optimize("unroll-loops")
#endif
using namespace std;

typedef long long ll;
typedef unsigned int uint;
typedef unsigned long long ull;
static const double EPS = 1e-12;
static const double PI = acos(-1.0);

#define FOR(i, a, b) for (int i = (int)(a); i < (int)(b); i++)
#define REP(i, n) for (int i = 0; i < (int)(n); i++)
#define ALL(a) (a).begin(), (a).end()
#ifdef LOCAL
#define dbg(x) cerr << __LINE__ << " : " << #x << " = " << (x) << endl
#else
#define dbg(x) true
#endif

ll dp[2010][2010];

int main() {
  int h, w;
  cin >> h >> w;
  vector<vector<int>> a(h, vector<int>(w));
  REP(y, h) {
    string s;
    cin >> s;
    REP(x, w) {
      if (s[x] == '+') {
        a[y][x] = 1;
      } else {
        a[y][x] = -1;
      }
    }
  }
  dp[h - 1][w - 1] = a[h - 1][w - 1] * (((h - 1) + (w - 1)) % 2 == 0 ? -1 : +1);
  dbg(a[h - 1][w - 1]);
  dbg(dp[h - 1][w - 1]);
  for (int y = h - 1; y > 0; y--) {
    int s = ((w - 1 + y) % 2 == 0) ? 1 : -1;
    dp[y - 1][w - 1] = dp[y][w - 1] + s * a[y - 1][w - 1];
  }
  for (int x = w - 1; x > 0; x--) {
    int s = ((h - 1 + x) % 2 == 0) ? 1 : -1;
    dp[h - 1][x - 1] = dp[h - 1][x] + s * a[h - 1][x - 1];
  }

  for (int y = h - 1; y > 0; y--) {
    for (int x = w - 1; x > 0; x--) {
      bool odd = (y + x) % 2 == 0;
      int s = odd ? -1 : 1;
      if (odd) {
        dp[y - 1][x - 1] = max(dp[y - 1][x], dp[y][x - 1]);
      } else {
        dp[y - 1][x - 1] = min(dp[y - 1][x], dp[y][x - 1]);
      }
      dp[y - 1][x - 1] += s * a[y - 1][x - 1];
    }
  }
  dp[0][0] += a[0][0];
  // REP(y, h) {
  //   REP(x, w) {
  //     cout << dp[y][x] << " ";
  //   }
  //   cout << endl;
  // }
  if (dp[0][0] > 0) {
    cout << "Takahashi" << endl;
  } else if (dp[0][0] == 0) {
    cout << "Draw" << endl;
  } else {
    cout << "Aoki" << endl;
  }
  return 0;
}
