#include <bits/stdc++.h>
 
#define rep(i,n) for(ll i=0;i<n;++i)
#define rrep(i, n) for(ll i=n-1;i>=0;--i)
#define rep1(i, n) for(ll i=1; i<=n; ++i)
#define repitr(itr,mp) for(auto itr=mp.begin();itr!=mp.end();++itr)
#define rrepitr(itr, mp) for(auto itr = mp.rbegin(); itr!=mp.rend(); ++itr)
#define ALL(a) (a).begin(),(a).end()

template<class T> void chmax(T &a, const T &b){if(a < b){a = b;}}
template<class T> void chmin(T &a, const T &b){if(a > b){a = b;}}

using namespace std;
using ll  = long long;
using ld = long double;
using ull = unsigned long long;
using pll = pair<ll, ll>;

const ll MOD  = 1e9 + 7;
const ll LINF = 1LL << 60;
const int INF = 1e9 + 7;
const double PI = 3.1415926535897932384626;

ll mod(ll a, ll m){return (a + m) % m;}

int main(){
    ll h, w;
    cin >> h >> w;

    ll a[h][w];
    rep(i, h)rep(j, w){
        char c;
        cin >> c;
        if(c == '+')a[i][j] = 1;
        else a[i][j] = -1;
    }

    ll dp[h][w];
    rrep(i, h)rrep(j, w){
        int turn = (i + j) % 2;
        if(turn)dp[i][j] = INF;
        else dp[i][j] = -INF;

        if(i + 1 >= h && j + 1 >= w)dp[i][j] = 0;
        
        if(i + 1 < h){
            if(turn)chmin(dp[i][j], dp[i+1][j] - a[i+1][j]);
            else chmax(dp[i][j], dp[i+1][j] + a[i+1][j]);
        }

        if(j + 1 < w){
            if(turn)chmin(dp[i][j], dp[i][j+1] - a[i][j+1]);
            else chmax(dp[i][j], dp[i][j+1] + a[i][j+1]);
        }        
    }

    if(dp[0][0] > 0)cout << "Takahashi";
    else if(dp[0][0] < 0)cout << "Aoki";
    else cout << "Draw";
}
#include <bits/stdc++.h>
#include <cmath>
using namespace std;
#define MOD 1000000007
#define int long long

#pragma region Debugger
void __print(int x) {cerr << x;}
void __print(long x) {cerr << x;}
//void __print(long long x) {cerr << x;}
void __print(unsigned x) {cerr << x;}
void __print(unsigned long x) {cerr << x;}
void __print(unsigned long long x) {cerr << x;}
void __print(float 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 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...);}
#ifndef ONLINE_JUDGE
#define debug(x...) cerr << "[" << #x << "] = ["; _print(x)
#else
#define debug(x...)
#endif
#pragma endregion Debugger

void start()
{
	ios::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);
#ifndef ONLINE_JUDGE
	freopen("input.txt", "r", stdin);
	freopen("output.txt", "w", stdout);
#endif
}
int maxm(int a, int b)
{
	return (a > b) ? a : b;
}
int A[2001][2001];
int dp[2001][2001];
int h, w;
int func(int i, int j)
{
	if ((i == h - 1) && (j == w - 1))
	{
		return 0;
	}
	if (i == h - 1)
	{
		if (dp[i][j] != INT_MIN)
		{
			return dp[i][j];
		}
		dp[i][j] = A[i][j + 1] - func(i, j + 1);
		return dp[i][j];
	}
	if (j == w - 1)
	{
		if (dp[i][j] != INT_MIN)
		{
			return dp[i][j];
		}
		dp[i][j] = A[i + 1][j] - func(i + 1, j);
		return dp[i][j];
	}

	if (dp[i][j] != INT_MIN)
	{
		return dp[i][j];
	}

	dp[i][j] = maxm(A[i][j + 1] - func(i, j + 1) , A[i + 1][j] - func(i + 1, j));
	return dp[i][j];

}
int32_t main()
{
	start();
	cin >> h >> w;
	for (int i = 0; i < h; i++)
	{
		for (int j = 0; j < w; j++)
		{
			dp[i][j] = INT_MIN;;
		}
	}
	memset(A, -1, sizeof(A));
	for (int i = 0; i < h; i++)
	{
		for (int j = 0; j < w; j++)
		{
			char ch;
			cin >> ch;
			if (ch == '+')
			{
				A[i][j] = 1;
			}
		}
	}
	int ans = func(0, 0);
	if (ans > 0)
	{
		cout << "Takahashi" << "\n";
	}
	else if (ans < 0)
	{
		cout << "Aoki" << "\n";
	}
	else
	{
		cout << "Draw" << "\n";
	}
}


