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

int H, W;
char grid[2009][2009];
int memo[2009][2009];
int INF = 10000000;
int MARKER = 2*INF;

int score(int x, int y) {
  if (grid[x][y] == '+') return 1;
  if (grid[x][y] == '-') return -1;
  assert(false);
}

int p1_advantage(int x, int y) {

  if (memo[x][y] != MARKER) return memo[x][y];

  int px = -INF;
  int py = -INF;

  if (x + 1 < H) px = score(x+1, y) - p1_advantage(x+1, y);
  if (y + 1 < W) py = score(x, y+1) - p1_advantage(x, y+1);

  if (px == -INF && py == -INF) return memo[x][y] = 0;

  return memo[x][y] = max(px, py);
}

int main() {

  cin >> H >> W;
  for (int i=0; i<H; i++) for (int j=0; j<W; j++) {
    cin >> grid[i][j];
    memo[i][j] = MARKER;
  }

  for (int i=0; i<H; i++) for (int j=0; j<W; j++) {
    char c = grid[i][j];
    assert(c == '+' || c == '-');
  }

  int r = p1_advantage(0, 0);

  if (r == 0) cout << "Draw" << endl;
  if (r > 0) cout << "Takahashi" << endl;
  if (r < 0) cout << "Aoki" << endl;

  return 0;
}

#include<bits/stdc++.h>
#include<ext/pb_ds/assoc_container.hpp>
#include<ext/pb_ds/tree_policy.hpp>
using namespace __gnu_pbds;
using namespace std;
///Welcome to Nasif's Code
#define bug printf("bug\n");
#define bug2(var) cout<<#var<<" "<<var<<endl;
#define co(q) cout<<q<<endl;
#define all(q) (q).begin(),(q).end()
#define pi acos(-1)
#define inf 1000000000000000LL
#define FastRead    ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
#define MODADD(ADD_X,ADD_Y)  (ADD_X+ADD_Y)%MOD
#define MODSUB(SUB_X,SUB_Y)  ((SUB_X-SUB_Y)+MOD)%MOD
#define MODMUL(MUL_X,MUL_Y)  (MUL_X*MUL_Y)%MOD
#define LCM(LCM_X,LCM_Y) (LCM_X/__gcd(LCM_X,LCM_Y))*LCM_Y
template <typename T> using ordered_set = tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>;
typedef long long int ll;
typedef unsigned long long int ull;
const int MOD = (int)1e9+7;
const int MAX = 1e6;
int dx[]= {1,0,-1,0,1,-1,1,-1};
int dy[]= {0,1,0,-1,1,-1,-1,1};
int dp[2025][2025][2],vis[2025][2025][2],mat[2025][2025],n,m;
pair<int,int> recur(int x,int y,int f)
{
    if(x==n || y==m)
        return {0,0};
    if(vis[x][y][f])
        return {dp[x][y][0],dp[x][y][1]};
    vis[x][y][f]=1;

    if(!f)
    {
        pair<int,int>r= {0,0},d= {0,0},ans= {0,0};
        if(x+1<n && y+1<m)
        {
            d=recur(x+1,y,f^1);
            d.first+=mat[x+1][y];
            r=recur(x,y+1,f^1);

            r.first+=mat[x][y+1];

            if(r.first-r.second>d.first-d.second)
                ans=r;
            else
                ans=d;
        }
        else if(x+1<n)
        {
            ans=recur(x+1,y,f^1);
            ans.first+=mat[x+1][y];
        }
        else if(y+1<m)
        {
            ans=recur(x,y+1,f^1);
            ans.first+=mat[x][y+1];
        }
        dp[x][y][0]=ans.first;
        dp[x][y][1]=ans.second;
       // cout<<x<<" "<<y<<" "<<ans.first<<endl;
        return ans;
    }
    else
    {
        pair<int,int>r= {0,0},d= {0,0},ans= {0,0};
        if(x+1<n && y+1<m)
        {
            d=recur(x+1,y,f^1);
            d.second+=mat[x+1][y];

            r=recur(x,y+1,f^1);
            r.second+=mat[x][y+1];

            if(r.second-r.first>d.second-d.first)
                ans=r;
            else
                ans=d;
        }
        else if(x+1<n)
        {
            ans=recur(x+1,y,f^1);
            ans.second+=mat[x+1][y];
        }
        else if(y+1<m)
        {
            ans=recur(x,y+1,f^1);
            ans.second+=mat[x][y+1];
        }
        dp[x][y][0]=ans.first;
        dp[x][y][1]=ans.second;
        if(x==2 && y==2)
            bug
        return ans;
    }
}
int main()
{
    FastRead
    //freopen("output.txt", "w", stdout);

    cin>>n>>m;
    for(int i=0; i<n; i++)
    {
        string s;
        cin>>s;
        for(int j=0; j<m; j++)
        {
            if(s[j]=='+')
                mat[i][j]=1;
            else
                mat[i][j]=-1;
        }
    }
    pair<int,int>p=recur(0,0,0);

    if(p.first>p.second)
        cout<<"Takahashi"<<endl;
    else if(p.first<p.second )
        cout<<"Aoki"<<endl;
    else
        cout<<"Draw"<<endl;


    return 0;
}
