#include <iostream> // cout, endl, cin
#include <string> // string, to_string, stoi
#include <vector> // vector
#include <algorithm> // min, max, swap, sort, reverse, lower_bound, upper_bound
#include <utility> // pair, make_pair
#include <tuple> // tuple, make_tuple
#include <cstdint> // int64_t, int*_t
#include <cstdio> // printf
#include <map> // map
#include <queue> // queue, priority_queue
#include <set> // set
#include <stack> // stack
#include <deque> // deque
#include <unordered_map> // unordered_map
#include <unordered_set> // unordered_set
#include <bitset> // bitset
#include <cctype> // isupper, islower, isdigit, toupper, tolower
#include <math.h>
#include <numeric>
using namespace std;
const long long INF = 1LL << 60;


int main() {
  int H, W;
  cin >> H >> W;

  vector<string> A(H);
  for (int i = 0; i < H; ++i) cin >> A[i];


  vector< vector<int> > dp(H, vector<int>(W,0));
  int num = 0;
  for (int h = H-1; h >= 0; --h) {
    for (int w = W-1; w >= 0; --w) {
      num = h+w;
      if (h == H-1 && w == W-1) continue;
      if (h == H-1) {
        if (num % 2 == 0) {
          dp[h][w] = dp[h][w+1] + (A[h][w+1] == '+' ? 1 : -1);
        } else {
          dp[h][w] = dp[h][w+1] + (A[h][w+1] == '+' ? -1 : 1);
        }
        continue;
      }
      if (w == W-1) {
        if (num % 2 == 0) {
          dp[h][w] = dp[h+1][w] + (A[h+1][w] == '+' ? 1 : -1);
        } else {
          dp[h][w] = dp[h+1][w] + (A[h+1][w] == '+' ? -1 : 1);
        }
        continue;
      }

      if (num % 2 == 0) {
        dp[h][w] = max(dp[h][w+1] + (A[h][w+1] == '+' ? 1 : -1), dp[h+1][w] + (A[h+1][w] == '+' ? 1 : -1));
      } else {
        dp[h][w] = min(dp[h][w+1] + (A[h][w+1] == '+' ? -1 : 1), dp[h+1][w] + (A[h+1][w] == '+' ? -1 : 1));
      }
    }
  }

  if (dp[0][0] == 0) cout << "Draw" << endl;
  else if (dp[0][0] > 0) cout << "Takahashi" << endl;
  else cout << "Aoki" << endl;
}

#include <bits/stdc++.h>
using namespace std;
#define rep(i,n) for (long long i = 0; i < (n); i++)
using ll = long long;

const int INF = (1 << 30) - 1;
const ll LINF = (1LL << 60) - 1;
const double PI = acos(-1);



int main() {
    ll h, w; cin >> h >> w;
    vector<string> s(h);
    rep(i, h) cin >> s[i];
    vector<vector<ll>> a(h, vector<ll>(w));
    rep(i, h) rep(j, w) {
        if (s[i][j] == '+') a[i][j] = 1;
        else a[i][j] = -1;
    }
    vector<vector<ll>> dp(h, vector<ll>(w));
    rep(i, h) rep(j, w) dp[i][j] = -INF;
    dp[h-1][w-1] = 0;
    for (ll i = h-1; i >= 0; i--) {
        for (ll j = w-1; j >= 0; j--) {
            if (i-1 >= 0) dp[i-1][j] = max(a[i][j]-dp[i][j], dp[i-1][j]);
            if (j-1 >= 0) dp[i][j-1] = max(a[i][j]-dp[i][j], dp[i][j-1]);
        }
    }
    if (dp[0][0] > 0) cout << "Takahashi" << endl;
    if (dp[0][0] < 0) cout << "Aoki" << endl;
    if (dp[0][0] == 0) cout << "Draw" << endl;
    return 0;
} 

//小数点の出力
//cout << fixed << std::setprecision(15) << ans << endl;