#include<bits/stdc++.h>
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp> 
#include <functional>
using namespace std;  
#define int long long
#define double long double
#define FAST ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0);
#define mod 1000000007
#define M2 1000000009
#define M1 998244353
#define inf 1e18
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());

using namespace __gnu_pbds;
typedef tree<int, null_type, less_equal<int>, rb_tree_tag,tree_order_statistics_node_update> new_data_set;
bool isprime(int n){
    	if(n==1) return false;
    	for(int i = 2;i*i<=n;i++){
    		if(n%i==0) return false;
		}
		return true;
}
int lcm(int a,int b){
	return (a*b)/__gcd(a,b);
}
int gcd(int a, int b){ 
    if (b == 0){
    	return a;
	} 
    return gcd(b, a % b);  
      
} 
int power(int x,int y,int p){  
    int res=1;
    if(x==0)return 0;  
    while(y>0){  
        if(y&1){
        	res*=x;
        	res%=p;
		}   
        y=y>>1;  
        x=(x*x); 
		x%=p;
		res%=p; 
    }  
    return res;  
}
int modInverse(int n, int p){
    return power(n, p-2,p);
}
struct node{
	int a,b;
};






/*    BAAP BAAP HOTA HAI
      Author : Sagar          */
 
 




signed main(){
	FAST
	int n,m;
	cin>>n>>m;
	int arr[n][m];
	for(int i=0;i<n;i++){
		for(int j=0;j<m;j++){
			char x;
			cin>>x;
			if(x=='-')arr[i][j]=-1;
			else arr[i][j]=1;
		}
	}
	int dp[n][m];
	dp[n-1][m-1]=0;
	for(int i=n-1;i>=0;i--){
		for(int j=m-1;j>=0;j--){
			if(i==n-1 && j==m-1)continue;
			if((i+j)%2==0){
				dp[i][j]=INT_MIN;
				if(i+1<n)dp[i][j]=max(dp[i][j],dp[i+1][j]+arr[i+1][j]);
				if(j+1<m)dp[i][j]=max(dp[i][j],dp[i][j+1]+arr[i][j+1]);
			}
			else{
				dp[i][j]=INT_MAX;
				if(i+1<n)dp[i][j]=min(dp[i][j],dp[i+1][j]-arr[i+1][j]);
				if(j+1<m)dp[i][j]=min(dp[i][j],dp[i][j+1]-arr[i][j+1]);
			}
		}
	}
	if(dp[0][0]>0)cout<<"Takahashi";
	else if(dp[0][0]<0)cout<<"Aoki";
	else cout<<"Draw";
}

/*
  Created by: Amit Kumar at 17:50 on 15 May 21
*/
#include <bits/stdc++.h>
#ifdef LOCAL
#include "debug.h"
#else
#define db(...)
#endif
using namespace std;

#define int long long
#define S(x, n) memset(x, n, sizeof(x));
#define pb(x) emplace_back(x)
#define all(x) x.begin(), x.end()
#define NIL -1

const long long MAXN = 1e5 + 1;
const long long mod = 1e18;

template <typename T>
inline istream &operator>>(istream &is, vector<T> &A);

int dp[2010][2010][2];
vector<string> arr;
int n, m;

int calc(int i, int j, int turn)
{
    int &ret = dp[i][j][turn];
    if (ret != -mod)
        return ret;

    if (turn == 0)
    {
        ret = -mod;
        if (i + 1 < n)
            ret = max(ret, (arr[i + 1][j] == '+' ? 1 : -1) + calc(i + 1, j, turn ^ 1));
        if (j + 1 < m)
            ret = max(ret, (arr[i][j + 1] == '+' ? 1 : -1) + calc(i, j + 1, turn ^ 1));
        if (ret == -mod)
            ret = 0;
    }
    else
    {
        ret = mod;
        if (i + 1 < n)
            ret = min(ret, (arr[i + 1][j] == '+' ? -1 : 1) + calc(i + 1, j, turn ^ 1));
        if (j + 1 < m)
            ret = min(ret, (arr[i][j + 1] == '+' ? -1 : 1) + calc(i, j + 1, turn ^ 1));
        if (ret == mod)
            ret = 0;
    }
    db(ret, i, j, turn);
    return ret;
}

void solve()
{

    cin >> n >> m;
    arr = vector<string>(n);
    cin >> arr;

    for (int i = 0; i <= n; i++)
        for (int j = 0; j <= m; j++)
            dp[i][j][0] = dp[i][j][1] = -mod;

    int ans = calc(0, 0, 0);
    db(ans);
    if (ans == 0)
        cout << "Draw\n";
    else if (ans > 0)
        cout << "Takahashi\n ";
    else
        cout
            << "Aoki\n";
}
int32_t main()
{
#ifdef LOCAL
    freopen("input.txt", "r", stdin);
    freopen("output.txt", "w", stdout);
    auto started = std::chrono::high_resolution_clock::now();
#endif

    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    int t;
    t = 1;
    //cin >> t;
    for (int I = 1; I <= t; I++)
    {
#ifdef LOCAL
        cerr << "TestCase " << I << "\n";
#endif
        solve();
    }
#ifdef LOCAL
    auto done = std::chrono::high_resolution_clock::now();
    cerr << "Time = " << std::chrono::duration_cast<std::chrono::milliseconds>(done - started).count() << " ms\n";
#endif
    return 0;
}
template <typename T>
inline istream &operator>>(istream &is, vector<T> &A)
{
    for (int i = 0; i < A.size(); i++)
        is >> A[i];
    return is;
}