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

void chmax(int& a, int b){
    a = max(a, b);
}

int main(){
    int H, W;
    cin >> H >> W;
    vector<string> S(H);
    for(int i=0; i<H; i++) cin >> S[i];

    vector<vector<int>> dp(H, vector<int>(W, -1e9));
    dp[H-1][W-1] = 0;
    for(int i=H-1; i>=0; i--) for(int j=W-1; j>=0; j--){
        int v = (S[i][j] == '+' ? 1 : -1);
        if(i) chmax(dp[i-1][j], -dp[i][j] + v);
        if(j) chmax(dp[i][j-1], -dp[i][j] + v);
    }
    int v = dp[0][0];
    string ans = "Draw";
    if(v > 0) ans = "Takahashi";
    if(v < 0) ans = "Aoki";
    cout << ans << endl;
    return 0;
}

#include<bits/stdc++.h>
using namespace std;
const int N=2010;
int f[N][N];
int n,m;
int opt[N][N];
int main(){
	scanf("%d%d",&n,&m);
	char s;
	for(int i=1;i<=n;i++)
	for(int j=1;j<=m;j++){
		cin>>s;
		if(s=='+')f[i][j]=1;
		else f[i][j]=-1;
	}
	for(int i=n;i>=1;i--)
	for(int j=m;j>=1;j--){
		if(i+1>n&&j+1>m)continue;
		else if(i+1>n&&j+1<=m){
			if(i+j&1)opt[i][j]=opt[i][j+1]-f[i][j+1];
			else opt[i][j]=opt[i][j+1]+f[i][j+1];
		}
		else if(i+1<=n&&j+1>m){
			if(i+j&1)opt[i][j]=opt[i+1][j]-f[i+1][j];
			else opt[i][j]=opt[i+1][j]+f[i+1][j];
		}
		else if(i+j&1)opt[i][j]=min(opt[i+1][j]-f[i+1][j],opt[i][j+1]-f[i][j+1]);
		else opt[i][j]=max(opt[i+1][j]+f[i+1][j],opt[i][j+1]+f[i][j+1]);
	}
	if(opt[1][1]>0)puts("Takahashi");
	else if(opt[1][1]==0)puts("Draw");
	else puts("Aoki");
	return 0;
}