#include<bits/stdc++.h>
#define rep(i, n) for (int i = 0; i < (int)(n); i++)
typedef long long ll;

using namespace std;

int h, w;
int memo[2000][2000];
int inf = INT_MAX;
string s[2000];

int f(int i, int j)
{
    if (i == h - 1 && j == w - 1) return 0;
    if (memo[i][j] != -inf) return memo[i][j];
    int res = -inf;
    if (i < h - 1) res = max(res, (s[i + 1][j] == '+' ? 1 : -1) - f(i + 1, j));
    if (j < w - 1) res = max(res, (s[i][j + 1] == '+' ? 1 : -1) - f(i, j + 1));
    return memo[i][j] = res;
}

int main()
{
    cin >> h >> w;
    rep(i, h) cin >> s[i];
    rep(i, h) rep(j, w) memo[i][j] = -inf;
    int ans = f(0, 0);
    if (ans == 0) cout << "Draw";
    if (ans > 0) cout << "Takahashi";
    if (ans < 0) cout << "Aoki";

    return 0;
}
#include <bits/stdc++.h>

#define fileio                                                  \
    freopen("C:\\Users\\PRISM17\\Desktop\\in.txt", "r", stdin); \
    freopen("C:\\Users\\PRISM17\\Desktop\\out.txt", "w", stdout);
#define fastio                   \
    ios::sync_with_stdio(false); \
    cin.tie(0);                  \
    cout.tie(0);
#define dbg(x) cout << #x << " : " << x << endl;
#define rep(i, a, b) for (int i = (a); i <= (b); i++)

#define mid (st[id].l + st[id].r >> 1)
#define lson (id << 1)
#define rson (id << 1 | 1)

using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef long double ld;
typedef pair<int, int> PII;
typedef pair<ll, ll> pll;
typedef pair<double, double> pdd;
const int inf = 0x3f3f3f3f;
const int INF = 1e9;

const int N = 2e3 + 7;
char mp[N][N];
int n, m;
int dp[N][N][2];

inline int get(int x, int y){
    char ch = mp[x][y];
    return ch == '+' ? 1 : -1;
}
int dfs(int x, int y, int op) {
    if (x == n && y == m) return 0;
    int &ans = dp[x][y][op];
    if (ans != -1) return ans;
    if (op) {
        ans = -inf;
        if (x < n) ans = max(dfs(x + 1, y, op ^ 1) + get(x + 1, y), ans);
        if (y < m) ans = max(dfs(x, y + 1, op ^ 1) + get(x, y + 1), ans);
    } else {
        ans = inf;
        if (x < n) ans = min(dfs(x + 1, y, op ^ 1) - get(x + 1, y), ans);
        if (y < m) ans = min(dfs(x, y + 1, op ^ 1) - get(x, y + 1), ans);
    }
    return ans;
}

int main() {
    memset(dp, -1, sizeof dp);
    cin >> n >> m;
    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= m; j++) {
            cin >> mp[i][j];
        }
    }
    int res = dfs(1, 1, 1);
    if (res > 0) puts("Takahashi");
    else if (res < 0) puts("Aoki");
    else puts("Draw");
}