#include <bits/stdc++.h>
typedef long long ll;
#define rep(i, n) for (int i = 0; i < (int)(n); i++)
template <class T>
bool chmax(T& a, const T& b) {
  if (a < b) {
    a = b;
    return 1;
  }
  return 0;
}
template <class T>
bool chmin(T& a, const T& b) {
  if (b < a) {
    a = b;
    return 1;
  }
  return 0;
}
using namespace std;

int H, W;
string A[2000];
bool vis[2000][2000];
int memo[2000][2000];

int rec(int x, int y) {
  if (vis[x][y]) return memo[x][y];
  vis[x][y] = true;
  if (x == H - 1 && y == W - 1) return memo[x][y] = 0;
  int turn = (x + y) % 2;
  if (turn == 0) {
    memo[x][y] = -5000;
    if (x < H - 1)
      chmax(memo[x][y], rec(x + 1, y) + (A[x + 1][y] == '+' ? 1 : -1));
    if (y < W - 1)
      chmax(memo[x][y], rec(x, y + 1) + (A[x][y + 1] == '+' ? 1 : -1));
    return memo[x][y];
  } else {
    memo[x][y] = 5000;
    if (x < H - 1)
      chmin(memo[x][y], rec(x + 1, y) - (A[x + 1][y] == '+' ? 1 : -1));
    if (y < W - 1)
      chmin(memo[x][y], rec(x, y + 1) - (A[x][y + 1] == '+' ? 1 : -1));
    return memo[x][y];
  }
}

int main() {
  cin >> H >> W;
  rep(i, H) cin >> A[i];
  int res = rec(0, 0);
  if (0 < res)
    cout << "Takahashi" << endl;
  else if (res == 0)
    cout << "Draw" << endl;
  else
    cout << "Aoki" << endl;
}

#include <bits/stdc++.h>

using namespace std;

const int N = 1010;
int n, m;
int a[N], b[N];
int f[N][N];

int main() {
	scanf("%d%d", &n, &m);
	for (int i = 1; i <= n; ++i) scanf("%d", &a[i]);
	for (int i = 1; i <= m; ++i) scanf("%d", &b[i]);
	
	memset(f, 0x3f, sizeof f);
	f[0][0] = 0;
	for (int i = 1; i <= n; ++i) f[i][0] = i;
	for (int j = 1; j <= m; ++j) f[0][j] = j;
	
	for (int i = 1; i <= n; ++i) {
		for (int j = 1; j <= m; ++j) {
			if (a[i] == b[j]) f[i][j] = min(f[i][j], f[i - 1][j - 1]);
			f[i][j] = min(f[i][j], f[i - 1][j] + 1);
			f[i][j] = min(f[i][j], f[i][j - 1] + 1);
			f[i][j] = min(f[i][j], f[i - 1][j - 1] + 1);
		}
	}
	
	printf("%d\n", f[n][m]);
	
	return 0;
}