#include<bits/stdc++.h>
using namespace std;
typedef long long int ll;
typedef vector<int> vi;
typedef vector<char> vc;
typedef vector<bool> vb;
typedef vector<double> vd;
typedef vector<string> vs;
typedef vector<ll> vll;
typedef vector<pair<int,int> > vpii;
typedef vector<vector<int> > vvi;
typedef vector<vector<char> > vvc;
typedef vector<vector<bool> > vvb;
typedef vector<vector<string> > vvs;
typedef vector<vector<ll> > vvll;
#define Rep(i,n) for(ll i=0;i<ll(n);i++)
#define Repd(i,n) for(ll i=n-1;i>=0;i--)
#define For(i,a,b) for(ll i=a;i<=ll(b);i++)
#define Ford(i,a,b) for(ll i=a;i>=ll(b);i--)
#define Fora(i,I) for(const auto& i:I)
#define ALL(a) a.begin(),a.end()
#define RALL(a) a.rbegin(),a.rend()
#define pusb push_back
#define emb emplace_back
#define pob push_back
const int INF30 = 1<<30;
const ll INF60 = 1LL<<60;
const ll MOD = 1000000007;
const ll val = 0;
const int dy[8] = {0, 1, 0, -1, 1, 1, -1, -1};
const int dx[8] = {1, 0, -1, 0, 1, -1, -1, 1};
template<typename T, typename U> inline bool chmax(T &a, U b) { return ((a < b) ? (a = b, true) : (false)); }
template<typename T, typename U> inline bool chmin(T &a, U b) { return ((a > b) ? (a = b, true) : (false)); }
ll myceil(ll a,ll b){return (a+(b-1))/b;}
ll myfloor(ll a,ll b){return a/b;}

int point(vvc &A, int y, int x){
	if(A.at(y).at(x) == '+')return 1;
	return -1;
}

int main(void) {
	int H,W;
	cin>>H>>W;
	vvc A(H, vc(W));
	Rep(i,H)Rep(j,W)cin>>A.at(i).at(j);
	vvi dp(H, vi(W));
	Ford(i,H-1,0)Ford(j,W-1,0){
		if(i == H - 1 && j == W - 1)continue;
		//cout<<i<<' '<<j<<endl;
		int tmp = 0;
		if((i + j)%2 == 0){
			tmp = -INF30;
			if(i + 1 < H)chmax(tmp,dp.at(i + 1).at(j) + point(A,i+1,j));
			if(j + 1 < W)chmax(tmp,dp.at(i).at(j + 1) + point(A,i,j+1));
		}else{
			tmp = INF30;
			if(i + 1 < H)chmin(tmp,dp.at(i + 1).at(j) - point(A,i+1,j));
			if(j + 1 < W)chmin(tmp,dp.at(i).at(j + 1) - point(A,i,j+1));	
		}
		dp.at(i).at(j) = tmp;
		//cout<<'*'<<tmp<<endl;
	}
	if(dp.at(0).at(0) > 0)cout<<"Takahashi"<<endl;
	else if(dp.at(0).at(0) == 0)cout<<"Draw"<<endl;
	else cout<<"Aoki"<<endl;
}
// Code Written by Pinaki Bhattacharjee (pinakipb2)
#include<bits/stdc++.h>
using namespace std;

// typedef
typedef long long ll;
typedef long double ld;
typedef unsigned int uint;
typedef unsigned long long ull;

// #define
#define LOCAL
#define endl "\n"
#define PI 2*acos(0.0)
#define ff first
#define ss second
#define pb push_back
#define ppb pop_back
#define pf push_front
#define ppf pop_front
#define mpr make_pair
#define all(x) (x).begin(),(x).end()
#define ppc __builtin_popcountll
void pinakipb2() {ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);}

// constants
const int MAX = 1e7 + 10;
const int MOD = (int) 1e9 + 7;

ll h,w;
ll a[2005][2005];
bool vis[2005][2005];
ll dp[2005][2005];
 
ll func(ll i, ll j)
{
    if(i==h-1 && j==w-1) return 0;
    if(vis[i][j]) return dp[i][j];
    vis[i][j] = true;
    ll ans = INT_MIN;
    if(j+1<w) ans = max(ans,a[i][j+1]-func(i,j+1));
    if(i+1<h) ans = max(ans,a[i+1][j]-func(i+1,j));
    return dp[i][j] = ans;
}

int main()
{
    pinakipb2();
    
    cin>>h>>w;
    vector<string> v(h);
    for(int i=0;i<h;i++)
    {
        cin>>v[i];
    }
    for(int i=0;i<h;i++)
    {
        for(int j=0;j<w;j++)
        {
            a[i][j] = v[i][j]=='+' ? 1 : -1;
        }
    }
    ll ans = func(0,0);
    if(ans==0) cout<<"Draw"<<endl;
    else if(ans<0) cout<<"Aoki"<<endl;
    else cout<<"Takahashi"<<endl;
    
    return 0;
}