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

const int INF = 1001001001;

int h, w;
int a[2005][2005];
bool visited[2005][2005];
int memo[2005][2005];

int f(int i, int j){
	if(i == h-1 && j == w-1) return 0;  	
  	if(visited[i][j]) return memo[i][j];
  	
  	visited[i][j] = true;
  	int res = -INF;
  	if(j+1 < w) res = max(res, a[i][j+1]-f(i, j+1));
    if(i+1 < h) res = max(res, a[i+1][j]-f(i+1, j));

  	return memo[i][j] = res;
}

int main(){
  	cin >> h >> w;
	rep(i, h)rep(j, w){
    	char x;
      	cin >> x;
      	if(x == '+') a[i][j] = 1;
       	else a[i][j] = -1;
    }
	
  	int score = f(0, 0);
  	
  	if(score == 0) cout << "Draw" << endl;
  	else if(score > 0) cout << "Takahashi" << endl;
  	else cout << "Aoki" << endl;
}
	// author: sharad12arse
#include<bits/stdc++.h>
using namespace std;

#define ll long long
#define ull unsigned long long
#define gcd __gcd
#define INF LONG_LONG_MAX

void solve(){
	int n,m;
	cin>>n>>m;
	vector<string> arr(n);
	for(int i=0;i<n;i++){
		cin>>arr[i];
	}
	vector<vector<int> > dp(n,vector<int> (m,0));
	vector<vector<int> > vst(n,vector<int> (m,0));
	queue<tuple<int,int,int> > qu;
	tuple<int,int,int> temp;
	int a=0;
	if((n+m)%2){
		a=1;
	}else{
		a=0;
	}
	int cnt=0;
	char ch=arr[0][0];
	qu.push(make_tuple(n-1,m-1,a));
	while(qu.size()){
		cnt++;
		temp=qu.front();
		qu.pop();
		int u,v,w;
		u=get<0>(temp);
		v=get<1>(temp);
		w=get<2>(temp);
		if(arr[u][v]=='!'){
			continue;
		}
		if(u==n-1&&v==m-1){
			if(w){
				if(arr[u][v]=='+'){
					dp[u][v]++;
				}else{
					dp[u][v]--;
				}
			}else{
				if(arr[u][v]=='+'){
					dp[u][v]--;
				}else{
					dp[u][v]++;
				}
			}
		}else
		if(u==n-1){
			if(w){
				if(arr[u][v]=='+'){
					dp[u][v]++;
				}else{
					dp[u][v]--;
				}
			}else{
				if(arr[u][v]=='+'){
					dp[u][v]--;
				}else{
					dp[u][v]++;
				}
			}
			dp[u][v]+=dp[u][v+1];
		}else
		if(v==m-1){
			if(w){
				if(arr[u][v]=='+'){
					dp[u][v]++;
				}else{
					dp[u][v]--;
				}
			}else{
				if(arr[u][v]=='+'){
					dp[u][v]--;
				}else{
					dp[u][v]++;
				}
			}
			dp[u][v]+=dp[u+1][v];
		}else{
			if(w){
				if(arr[u][v]=='+'){
					dp[u][v]++;
				}else{
					dp[u][v]--;
				}
				dp[u][v]+=min(dp[u+1][v],dp[u][v+1]);
			}else{
				if(arr[u][v]=='+'){
					dp[u][v]--;
				}else{
					dp[u][v]++;
				}
				dp[u][v]+=max(dp[u+1][v],dp[u][v+1]);
			}
		}
		arr[u][v]='!';
		if(u-1>=0&&vst[u-1][v]!=1){
			qu.push(make_tuple(u-1,v,w^1));
			vst[u-1][v]=1;
		}
		if(v-1>=0&&vst[u][v-1]!=1){
			qu.push(make_tuple(u,v-1,w^1));
			vst[u][v-1]=1;
		}
	}
	if(ch=='+'){
		dp[0][0]++;
	}else{
		dp[0][0]--;
	}
	// for(int i=0;i<n;i++){
	// 	for(int j=0;j<m;j++){
	// 		cout<<dp[i][j]<<" ";
	// 	}
	// 	cout<<"\n";
	// }
	if(dp[0][0]==0){
		cout<<"Draw\n";
	}else{
		if(dp[0][0]>0){
			cout<<"Takahashi\n";
		}else{
			cout<<"Aoki\n";
		}
	}
}

int main(){
	ios_base::sync_with_stdio(0);
	cin.tie(0);
	int t=1;
	// cin>>t;
	while(t--){
		solve();
	}
}
