#include<bits/stdc++.h>
using namespace std;
#define endl '\n'
#define ll long long
#define pll pair<ll,ll>
#define rep(i,n) for(ll i=0;i<n;i++)
#define mod 1000000007 
#define INF 10000000000000000
#define F first
#define S second
#define pb push_back
#define lb lower_bound
#define ub upper_bound
#define pie 3.141592653589793238462643383279
#define PYES cout<<"YES"<<endl
#define PNO cout<<"NO"<<endl
#define SB(a) sort(a.begin(),a.end(),greater<ll>());
#define SS(a) sort(a.begin(),a.end());
#define vll vector<ll>
#define vpll vector<pll> 
vector<bool> prime;
vector<ll> fact,inv,primes,factors;
void fast()
{
	ios_base::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);
}
void factorize(ll a)
{
	factors.clear();
	for(ll i=1;i*i<=a;i++)
	{
		if (i*i==a) factors.pb(i);
		else if (a%i==0)
		{
			factors.pb(i);
			factors.pb(a/i);
		}
	}
	sort(factors.begin(),factors.end());
}
ll power(ll a,ll b)
{
	if(a==1||b==0)	return 1;
	ll c=power(a,b/2);
	ll res=1;
	res=c*c;
	if(res>=mod)	res%=mod;
	if(b%2)	res*=a;
	if(res>=mod)	res%=mod;
	return res;
}
ll modInv(int a)
{
	return power(a,mod-2);
}
void factorial(ll n)
{
	fact.resize(n+1);
	fact[0]=1;
	for(ll i=1;i<=n;i++)
	{
		fact[i]=fact[i-1]*i;
		if(fact[i]>=mod)	fact[i]%=mod;
	}
}
void InvFactorial(ll n)
{
	inv.resize(n+1);
	inv[0]=1;
	for(ll i=1;i<=n;i++)	inv[i]=modInv(fact[i]);
}
ll ncr(ll n,ll r)
{
	if(n<r||n<0||r<0)	return 0;
	ll b=inv[n-r];
	ll c=inv[r];
	ll a=fact[n]*b;
	if(a>=mod)	a%=mod;
	a*=c;
	if(a>=mod)	a%=mod;
	return a;
}
void remove_duplicates(vector<pair<ll,ll> > &v)
{
	sort(v.begin(),v.end());
	ll _size=unique(v.begin(),v.end())-v.begin();
	v.resize(_size);
}
unsigned ll gcd(unsigned ll u, unsigned ll v)
{
    if(u==0||v==0) return max(u,v);
    unsigned ll shift=__builtin_ctz(u|v);
	u>>=__builtin_ctz(u);
    do{
    	v>>=__builtin_ctz(v);
    	if(u>v)	swap(u,v);
    	v-=u;
    }while(v!=0);
    return u<<shift;
}
void sieve(int n)
{
    prime.assign(n+1,1);
	prime[1]=false;
    for(ll p=2;p*p<=n;p++) if(prime[p])	for(ll i=p*p;i<=n;i+=p)	prime[i]=false;
    for(ll i=2;i<n+1;i++) if(prime[i]) primes.push_back(i);
}
ll size(ll l)
{
	ll p=l;
	ll count=0;
	while(p) p/=10,count++;
	return count;
}
//--------------------------------------------------------------------------------------------------------------------------------------------------
// Always remember: if (condition) if (condition) statement; This doesn't work !!
// Always increase boundaries for global or frequency questions
// pow((int)10,i) doesn't work sometimes. It is better to use multiple of 10 in arrays. Always remember this.
// delete values when defining global if there are multiple testcases
// don't try to be smart and make stupid mistakes 
ll n,m;
vector<string> a(2005);
vector<vll> dp(2005,vll(2005,-INF));
ll cont(ll i,ll j)
{
	if (a[i][j]=='+') return 1;
	else return -1;
}
ll func(ll i,ll j)
{
	if (i==n-1 && j==m-1) return 0;
	ll &ans=dp[i][j];
	if (ans>-INF) return ans;
	if ((i-j)%2==0) 
	{
		ll t=-INF;
		if (i<n-1) t=max(t,func(i+1,j)+cont(i+1,j));
		if (j<m-1) t=max(t,func(i,j+1)+cont(i,j+1));
		ans=t;
	}
	else
	{
		ll t=INF;
		if (i<n-1) t=min(t,func(i+1,j)-cont(i+1,j));
		if (j<m-1) t=min(t,func(i,j+1)-cont(i,j+1));
		ans=t;
	}
	return ans;
}
void solve()
{
	cin>>n>>m;
	rep(i,n) cin>>a[i];
	ll ans=func(0,0);
	if (ans>0) cout<<"Takahashi";
	else if (ans<0) cout<<"Aoki";
	else cout<<"Draw";
}
signed main()
{
	fast();
	ll T=1;
	//cin>>T;
	for(ll i=1;i<=T;i++) solve();
} 

// Always remember that you are absolutely unique, just like everyone else!

#include <iostream>
#include <vector>
using namespace std;


// DEBUGGING SECTION
void __print(int x) {cerr << x;}
void __print(long long x) {cerr << x;}
void __print(double x) {cerr << x;}
void __print(long double x) {cerr << x;}
void __print(char x) {cerr << '\'' << x << '\'';}
void __print(const string &x) {cerr << '\"' << x << '\"';}
void __print(bool x) {cerr << (x ? "true" : "false");}
template<typename T, typename V>
void __print(const pair<T, V> &x) {cerr << '{'; __print(x.first); cerr << ','; __print(x.second); cerr << '}';}
template<typename T>
void __print(const T &x) {int f = 0; cerr << '{'; for (auto &i : x) cerr << (f++ ? "," : ""), __print(i); cerr << "}";}
void _print() {cerr << "]\n";}
template <typename T, typename... V>
void _print(T t, V... v) {__print(t); if (sizeof...(v)) cerr << ", "; _print(v...);}


#define fastio  ios_base::sync_with_stdio(false);cin.tie(NULL)
#define debug(x...) cerr << "[" << #x << "] = ["; _print(x)


#define MOD     1000000007
#define INF     3e18
#define pb      push_back
#define endl    '\n' // Remove if interactive
#define ff      first
#define ss      second
#define FOR(i, a, b)   for(int i = a; i < b; i++)


//#include <algorithm>
//#include <cstring>
//#include <map>
//#include <set>
//#include <queue>
//#include <stack>
//#include <math.h>

//#include <bits/stdc++.h>

#define int     long long
#define pii     pair<int, int>
#define vi      vector<int>
#define vvi     vector<vi>
#define vpii    vector<pii>
#define all(x)  x.begin(), x.end()

int power(int x, int y) {
	int ans = 1; x %= MOD;
	while (y) {
		if (y & 1)
			ans = (x * ans) % MOD;
		x = (x * x) % MOD;
		y >>= 1;
	}
	return ans;
}




// comparator(A, B) -> should return true if A needs to come before B!
// ALWAYS RETURN FALSE IF A == B

// USE INTEGERS TO REDUCE RUNTIME!

const int maxn = 2010;
int n, m;
vvi arr(maxn, vi(maxn));
vector<vpii> dp(maxn, vpii(maxn, { -1, -1}));

pii helper(int x, int y) {
	if (dp[x][y].ff != -1)
		return dp[x][y];
	if (x == n && y == m)
		return {0, 0};
	pii curr = { -INF, INF};

	if (x + 1 <= n) {
		pii a = helper(x + 1, y);
		if (a.ss + arr[x + 1][y] - a.ff > curr.ff - curr.ss) {
			curr = {a.ss + arr[x + 1][y], a.ff};
		}
	}
	if (y + 1 <= m) {
		pii a = helper(x, y + 1);
		if (a.ss + arr[x][y + 1] - a.ff > curr.ff - curr.ss) {
			curr = {a.ss + arr[x][y + 1], a.ff};
		}
	}

	dp[x][y] = curr;
	return curr;
}

void solve() {
	cin >> n >> m;
	FOR(i, 1, n + 1) {
		FOR(j, 1, m + 1) {
			char c;
			cin >> c;

			arr[i][j] = (c == '+') ? 1 : -1;
		}
	}

	pii ans = helper(1, 1);
	debug(ans);
	if (ans.ff == ans.ss) {
		cout << "Draw\n";
	} else if (ans.ff > ans.ss) {
		cout << "Takahashi\n";
	} else {
		cout << "Aoki\n";
	}
}



int32_t main() {
#ifndef ONLINE_JUDGE
	freopen("input.txt", "r", stdin);
	// freopen("error.txt", "w", stderr);
	freopen("output.txt", "w", stdout);
#endif

	fastio;
	int t = 1;
	// cin >> t;
	while (t--) {
		solve();
	}
}
