//pls work
#include <bits/stdc++.h>
#include <cmath>
#include <cctype>
#include <cstring>
    
#define fori(i, j, k, in) for (int i = j; i < k; i += in)
#define rfori(i, j, k, in) for (int i = j - 1; i >= k; i -= in)
#define rep(i, j) fori(i, 0, j, 1)
#define rrep(i, j) rfori(i, j, 0, 1)
#define sq(a) (a) * (a)
#define IAMSPEED std::ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
#define acci(n) ll n; cin>>n;
#define accia(n, a) ll n; cin>>n; ll a[n]; for(int i=0; i<n; i++) cin>>a[i];
#define pb push_back
#define mp make_pair
    
using namespace std;
    
typedef pair<int, int> pi;
typedef vector<int> vi;
typedef long long ll;
    
const int N = 5e+5, m = 1000000007;
    
//USE ll instead of int
//Don't use rep for dp!!
    
int main()
{
    IAMSPEED
    int T = 1, cse = 0;
    // cin >> T;
    while (T--)
    {
        //cse++;
        //cout<<"Case #"<<cse<<": ";
        int h, w;
        cin>>h>>w;
        char c;
        int a[h+1][w+1];
        int dp[h+1][w+1];
        memset(a,0,sizeof(a));
        memset(dp,0,sizeof(dp));
        rep(i, h)
        {
            rep(j, w)
            {
                cin>>c;
                if(c=='+')
                    a[i][j] = 1;
                else
                    a[i][j] = -1;
            }
        }
        rrep(i, h)
        {
            rrep(j, w)
            {
                if(i==h-1&&j==w-1)
                    continue;
                else if((i+j)%2==0)
                {
                    if (i==h-1)
                    {
                        dp[i][j] = dp[i][j+1]+a[i][j+1];
                    }
                    else if (j==w-1)
                    {
                        dp[i][j] = dp[i+1][j]+a[i+1][j];
                    }
                    else
                    {
                        dp[i][j] = max(dp[i+1][j]+a[i+1][j], dp[i][j+1]+a[i][j+1]);
                    }
                }
                else
                {
                    if (i==h-1)
                    {
                        dp[i][j] = dp[i][j+1]-a[i][j+1];
                    }
                    else if (j==w-1)
                    {
                        dp[i][j] = dp[i+1][j]-a[i+1][j];
                    }
                    else
                    {
                        dp[i][j] = min(dp[i+1][j]-a[i+1][j], dp[i][j+1]-a[i][j+1]);
                    }
                }
            }
        }
        if(dp[0][0]==0)
            cout<<"Draw";
        else if(dp[0][0]>0)
            cout<<"Takahashi";
        else cout<<"Aoki";
    }
    return 0;
}
#include <bits/stdc++.h> 

using namespace std;

typedef vector<int> vec;
typedef vector<vec> grid;

int main() {
  int h, w;
  cin>>h>>w;
  grid dp(h+1, vec(w+1, -1));
  grid cell_score(h+1, vec(w+1, -1));

  vector<string> game(h);
  for (int i=0; i<h; ++i) {
    cin>>game[i];
  }
  for (int i=0; i<h; ++i) {
    for (int j=0; j<w; ++j) {
      if (game[i][j] == '+')
        cell_score[i][j] = 1;
      else 
        cell_score[i][j] = -1;
    }
  }
  
  dp[h-1][w-1] = 0;

  for (int i=h-1; i>=0; --i) {
    for (int j=w-1; j>=0; --j) {
      if (i==h-1 && j==w-1) {
        continue;
      }
      int res = numeric_limits<int>::min();
      int temp_res;
      if ( i!= h-1) {
        temp_res = cell_score[i+1][j] - dp[i+1][j];
        res = max(res, temp_res);
      }
      if (j != w-1) {
        temp_res = cell_score[i][j+1] - dp[i][j+1];
        res = max(res, temp_res);
      }
      dp[i][j] = res;
    }
  }
  if (dp[0][0] > 0) {
    cout<<"Takahashi";
  }
  else if(dp[0][0] < 0) {
    cout<<"Aoki";
  }
  else {
    cout<<"Draw";
  }
}