#include <bits/stdc++.h>
using namespace std;
// #include <atcoder/all>
// using namespace atcoder;
using ll = long long;
#define _overload3(_1,_2,_3,name,...) name
#define _rep(i,n) repi(i,0,n)
#define repi(i,a,b) for(int i=int(a);i<int(b);++i)
#define rep(...) _overload3(__VA_ARGS__,repi,_rep,)(__VA_ARGS__)
#define _rrep(i,n) rrepi(i,0,n)
#define rrepi(i,a,b) for(int i=int(b)-1;i>=int(a);--i)
#define rrep(...) _overload3(__VA_ARGS__,rrepi,_rrep,)(__VA_ARGS__)
template<class T>bool chmax(T &a, const T &b) { if (a<b) { a=b; return 1; } return 0; }
template<class T>bool chmin(T &a, const T &b) { if (b<a) { a=b; return 1; } return 0; }

void Main()
{
    int h, w;
    cin >> h >> w;
    vector<string> a(h);
    rep(i, h) cin >> a[i];
    vector<vector<int>> d(h, vector<int>(w));
    rrep(i, h) {
        rrep(j, w) {
            int t;
            if (i == h-1 && j == w-1){
                t = 0;
            }else if ((i+j)%2 != 0){
                t = 100000000;
                if (i<h-1) chmin(t, d[i+1][j]+(a[i+1][j]=='+'?-1:1));
                if (j<w-1) chmin(t, d[i][j+1]+(a[i][j+1]=='+'?-1:1));
            }else{
                t = -100000000;
                if (i<h-1) chmax(t, d[i+1][j]+(a[i+1][j]=='+'?1:-1));
                if (j<w-1) chmax(t, d[i][j+1]+(a[i][j+1]=='+'?1:-1));
            }
            d[i][j] = t;
        }
    }
    if (d[0][0] > 0) cout << "Takahashi" << endl;
    if (d[0][0] < 0) cout << "Aoki" << endl;
    if (d[0][0] == 0) cout << "Draw" << endl;
}

int main(int argc, char **argv)
{
    ios::sync_with_stdio(false);
    std::cin.tie(nullptr);
    // int t; cin >> t; rep(i, t)
    Main();
    return 0;
}

#include "bits/stdc++.h"
using namespace std;

#define ll long long int 
#define pb(a) push_back(a)
#define vll vector<ll>
#define loop(i, n) for(ll i=1;i<=n;i++)
#define loop0(i, n) for(ll i=0;i<n;i++)
#define in(i) scanf("%lld", &i);
#define out(i) printf("%lld", i)
#define pll pair<ll, ll>
#define vpll vector<pair<ll, ll>>
#define mp(i, j) make_pair(i, j);
const ll mod = 1000000007;
const ll big = 2999999999999999999;
const ll small = -2999999999999999999;
void in2(ll& a, ll& b) { in(a); in(b); }
void in3(ll& a, ll& b, ll& c) { in(a); in(b); in(c); }
void swap(ll& a, ll& b) { a = a+b; b = a-b; a = a-b; }
void arrayIn(vll& a, ll& n) { loop0(i, n) in(a[i]); }

ll h, w, dp[2001][2001][2];
ll grid[2001][2001];

ll solve(ll i, ll j, ll turn)
{
  if(i == h-1 && j == w-1)
    return 0;
  if(dp[i][j][turn] != -1)
    return dp[i][j][turn];
  if(i == h-1)
  {
    ll c = solve(i, j+1, 1^turn) + (turn ? -1 : 1)*grid[i][j+1];
    return dp[i][j][turn] = c;
  }
  if(j == w-1)
  {
    ll c = solve(i+1, j, 1^turn) + (turn ? -1 : 1)*grid[i+1][j];
    return dp[i][j][turn] = c;
  }
  ll c1 = solve(i+1, j, 1^turn) + (turn ? -1 : 1)*grid[i+1][j], c2 = solve(i, j+1, 1^turn) + (turn ? -1 : 1)*grid[i][j+1];
  if(turn == 0)
    return dp[i][j][turn] = max(c1, c2);
  else
    return dp[i][j][turn] = min(c1, c2);
}

int main()
{
  memset(dp, -1, sizeof(dp));
  in2(h, w);
  char c;
  loop0(i, h)
  {
    loop0(j, w)
    {
      cin>>c;
      if(c == '+')
        grid[i][j] = 1;
      else
        grid[i][j] = -1;
    }
  }
  ll ans = solve(0, 0, 0);
  if(ans > 0)
    cout<<"Takahashi\n";
  else if(ans < 0)
    cout<<"Aoki\n";
  else
    cout<<"Draw\n";
}
