#include <bits/stdc++.h>

#define rep(i,n) for(int i=0;i<(n);i++)

using namespace std;

const int INF=1<<29;

int h,w;
vector<string> B;

bool vis[2000][2000][2];
int memo[2000][2000][2];

int dfs(int i,int j,int turn){
	if(i==h-1 && j==w-1) return 0;

	int& res=memo[i][j][turn];
	if(vis[i][j][turn]) return res;
	vis[i][j][turn]=true;

	if(turn==0){
		res=-INF;
		if(i<h-1) res=max(res,dfs(i+1,j,1-turn)+(B[i+1][j]=='+'?1:-1));
		if(j<w-1) res=max(res,dfs(i,j+1,1-turn)+(B[i][j+1]=='+'?1:-1));
	}
	else{
		res=INF;
		if(i<h-1) res=min(res,dfs(i+1,j,1-turn)-(B[i+1][j]=='+'?1:-1));
		if(j<w-1) res=min(res,dfs(i,j+1,1-turn)-(B[i][j+1]=='+'?1:-1));
	}
	return res;
}

int main(){
	cin>>h>>w;
	B.resize(h);
	rep(i,h) cin>>B[i];

	int res=dfs(0,0,0);
	puts(res>0?"Takahashi":res==0?"Draw":"Aoki");

	return 0;
}

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <string>
#include <cmath>
#include <vector>
#include <queue>
#include <climits>
#include <utility>
typedef long long ll;
using namespace std;

int main(void){
  int h, w, i, j;
  string buff;
  vector<vector<int> > field, score;

  cin >> h >> w;
  field.resize(h,vector<int>(w));
  score.resize(h,vector<int>(w));
  for(i=0;i<h;i++){
    cin >> buff;
    for(j=0;j<w;j++){
      if(buff[j]=='+') field[i][j] = 1;
      else field[i][j] = -1;
    }
  }

  if((h+w)%2==0){
    score[h-1][w-1] = field[h-1][w-1];
  }
  else{
    score[h-1][w-1] = field[h-1][w-1] * -1;
  }
  
  j = w-1;
  for(i=h-2;i>=0;i--){
    if((i+j)%2==0){
      score[i][j] = score[i+1][j] + field[i][j];
    }
    else{
      score[i][j] = score[i+1][j] - field[i][j];
    }
  }
  i = h-1;
  for(j=w-2;j>=0;j--){
    if((i+j)%2==0){
      score[i][j] = score[i][j+1] + field[i][j];
    }
    else{
      score[i][j] = score[i][j+1] - field[i][j];
    }
  }

  for(i=h-2;i>=0;i--){
    for(j=w-2;j>=0;j--){
      if((i+j)%2==0){
        score[i][j] = min(score[i+1][j],score[i][j+1]) + field[i][j];
      }
      else{
        score[i][j] = max(score[i+1][j],score[i][j+1]) - field[i][j];
      }
    }
  }

  if(h==1){
    if(w==1){
      cout << "Draw" << endl;
      return 0;
    }
    score[0][0] = score[0][1];
  }
  else if(w==1){
    score[0][0] = score[1][0];
  }
  else{
    score[0][0] = min(score[1][0],score[0][1]);
  }

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

  return 0;
}
