#include<bits/stdc++.h>
using namespace std;
int main(){
    int h,w;
    cin>>h>>w;
    vector<string> field(h);
    for(int i=0;i<h;i++) cin>>field[i];
    vector<vector<int>> dp(h,vector<int>(w,2e9));
    dp[h-1][w-1]=0;
    for(int i=h-1;i>=0;i--){
        for(int j=w-1;j>=0;j--){
            if(0<=i-1){
                if((i+1+j)%2){
                    int op=0;
                    if(field[i][j]=='+')op++;
                    else op--;
                    if(dp[i-1][j]!=2e9)dp[i-1][j]=max(dp[i][j]+op,dp[i-1][j]);
                    else dp[i-1][j]=dp[i][j]+op;
                }
                else{
                    int op=0;
                    if(field[i][j]=='+')op--;
                    else op++;
                    if(dp[i-1][j]!=2e9)dp[i-1][j]=min(dp[i][j]+op,dp[i-1][j]);
                    else dp[i-1][j]=dp[i][j]+op;
                }
            }
            if(0<=j-1){
                if((j+1+i)%2){
                    int op=0;
                    if(field[i][j]=='+')op++;
                    else op--;
                    if(dp[i][j-1]!=2e9)dp[i][j-1]=max(dp[i][j]+op,dp[i][j-1]);
                    else dp[i][j-1]=dp[i][j]+op;
                }
                else{
                    int op=0;
                    if(field[i][j]=='+')op--;
                    else op++;
                    if(dp[i][j-1]!=2e9)dp[i][j-1]=min(dp[i][j]+op,dp[i][j-1]);
                    else dp[i][j-1]=dp[i][j]+op;
                }
            }
        }
    }
    //for(int i=0;i<h;i++){
        
    if(dp[0][0]<0){
        cout<<"Takahashi"<<endl;
    }
    else if(dp[0][0]==0){
        cout<<"Draw"<<endl;
    }
    else cout<<"Aoki"<<endl;
    return 0;
}
#include <bits/stdc++.h>
 
using namespace std;

typedef long long ll;
typedef vector<int> vi;
typedef vector<long long> vll;
typedef vector<pair<int,int>> vpi;
 
#define FOR(i,a,b) for (int i = (a); i < (b); ++i)
#define F0R(i,a) FOR(i,0,a)
#define ROF(i,a,b) for (int i = (b)-1; i >= (a); --i)
#define R0F(i,a) ROF(i,0,a)
#define trav(a,x) for (auto& a: x)
 
#define pb push_back
#define rsz resize
#define all(x) begin(x), end(x)
#define pi pair<int, int>
#define mp make_pair
#define F first
#define S second

int h, w;
string s;
vector<vi> a;
vector<vi> dp;
 
int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cin >> h >> w;
    a.rsz(h, vi(w, -1));
    dp.rsz(h, vi(w, 0));
    F0R(i, h) {
        cin >> s;
        F0R(j, w) if (s[j]=='+') a[i][j]=1;
    }
    R0F(i, h) R0F(j, w) {
        if (i==h-1 && j==w-1) continue;
        dp[i][j]=INT_MIN;
        if (i<h-1) dp[i][j]=max(dp[i][j], a[i+1][j]-dp[i+1][j]);
        if (j<w-1) dp[i][j]=max(dp[i][j], a[i][j+1]-dp[i][j+1]);
    }
    if (dp[0][0]>0) cout << "Takahashi\n";
    else if (dp[0][0]==0) cout << "Draw\n";
    else cout << "Aoki\n";
}
