#include <iostream>
using namespace std;

const int INF = 10000000;

int d[2005][2005];

int main()
{
    int h, w;
    cin >> h >> w;
    string a[2005];
    for(int i = 0; i < h; i++) cin >> a[i];
    for(int i = 0; i < h; i++){
        for(int j = 0; j < w; j++){
            if((i + j) % 2) d[i][j] = INF;
            else d[i][j] = -INF;
        }
    }
    d[h - 1][w - 1] = 0;
    for(int i = h - 1; i >= 0; i--){
        for(int j = w - 1; j >= 0; j--){
            if((i + j) % 2){
                if(i < h - 1){
                    if(a[i + 1][j] == '+') d[i][j] = min(d[i][j], d[i + 1][j] - 1);
                    else d[i][j] = min(d[i][j], d[i + 1][j] + 1);
                }
                if(j < w - 1){
                    if(a[i][j + 1] == '+') d[i][j] = min(d[i][j], d[i][j + 1] - 1);
                    else d[i][j] = min(d[i][j], d[i][j + 1] + 1);
                }
            }
            else{
                if(i < h - 1){
                    if(a[i + 1][j] == '+') d[i][j] = max(d[i][j], d[i + 1][j] + 1);
                    else d[i][j] = max(d[i][j], d[i + 1][j] - 1);
                }
                if(j < w - 1){
                    if(a[i][j + 1] == '+') d[i][j] = max(d[i][j], d[i][j + 1] + 1);
                    else d[i][j] = max(d[i][j], d[i][j + 1] - 1);
                }
            }
        }
    }
    if(d[0][0] > 0) cout << "Takahashi" << endl;
    if(d[0][0] < 0) cout << "Aoki" << endl;
    if(d[0][0] == 0) cout << "Draw" << endl;
}

#pragma region head
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using vi = vector<int>;
using vll = vector<ll>;
using pi = pair<int, int>;
using pll = pair<ll, ll>;
template <class T>
using vv = vector<vector<T>>;
#define rep(i, n) for (int i = 0; i < (int)(n); i++)
#define repi(i, a, b) for (int i = (int)(a); i < (int)(b); i++)
#define rrep(i, n) for (int i = (int)(n)-1; i >= 0; i--)
#define rrepi(i, a, b) for (int i = (int)(b)-1; i >= (int)(a); i--)
#define all(x) (x).begin(), (x).end()
#define rall(x) (x).rbegin(), (x).rend()
#define bit(n) (1LL << (n))
template <class T>
inline bool chmax(T& a, const T& b) {
    if (a < b) {
        a = b;
        return 1;
    }
    return 0;
}
template <class T>
inline bool chmin(T& a, const T& b) {
    if (a > b) {
        a = b;
        return 1;
    }
    return 0;
}
const int INF = 1002003004;
const ll LINF = 1002003004005006007ll;
struct preprocess {
    preprocess() {
        cin.tie(nullptr);
        ios::sync_with_stdio(false);
        cout << fixed << setprecision(20);
    }
} ____;
#pragma endregion head

#pragma region library
const int MOD = 998244353;
struct mint {
    ll x;  // typedef long long ll;
    mint(ll x = 0) : x((x % MOD + MOD) % MOD) {}
    mint operator-() const { return mint(-x); }
    mint& operator+=(const mint a) {
        if ((x += a.x) >= MOD) x -= MOD;
        return *this;
    }
    mint& operator-=(const mint a) {
        if ((x += MOD - a.x) >= MOD) x -= MOD;
        return *this;
    }
    mint& operator*=(const mint a) {
        (x *= a.x) %= MOD;
        return *this;
    }
    mint operator+(const mint a) const {
        mint res(*this);
        return res += a;
    }
    mint operator-(const mint a) const {
        mint res(*this);
        return res -= a;
    }
    mint operator*(const mint a) const {
        mint res(*this);
        return res *= a;
    }
    mint pow(ll t) const {
        if (!t) return 1;
        mint a = pow(t >> 1);
        a *= a;
        if (t & 1) a *= *this;
        return a;
    }
    // for prime MOD
    mint inv() const {
        return pow(MOD - 2);
    }
    mint& operator/=(const mint a) {
        return (*this) *= a.inv();
    }
    mint operator/(const mint a) const {
        mint res(*this);
        return res /= a;
    }
    bool operator==(const mint a) const {
        return x == a.x;
    }
    bool operator!=(const mint a) const {
        return x != a.x;
    }
    friend ostream& operator<<(ostream& os, const mint& value) {
        os << value.x;
        return os;
    }
    friend istream& operator>>(istream& is, mint& value) {
        ll t;
        is >> t;
        value = mint(t);
        return is;
    }
};

#pragma endregion library

int main() {
    int n, k;
    cin >> n >> k;
    vector<vector<mint>> dp(n + 1, vector<mint>(n + 1));
    vector<vector<mint>> pdp(n + 2, vector<mint>(n + 2));
    dp[k][k] = 1;
    rep(j, k + 1) {
        pdp[k][j] = 1;
    }
    repi(i, k + 1, n + 1) rrep(j, n + 1) {
        if (j % 2) {
            dp[i][j] = 0;
        } else {
            int pi = i - j / 2, pj = j / 2;
            if (pi >= 0)
                dp[i][j] += pdp[pi][pj];
        }
        pdp[i][j] += pdp[i][j + 1] + dp[i][j];
    }
    mint ans = 0;
    rep(i, n + 1) {
        ans += dp[n][i];
    }
    cout << ans << '\n';
}
