#include <bits/stdc++.h>

#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace __gnu_pbds;

using namespace std;

// #define endl '\n'
#define int long long int
#define rep(i, a, b) for (int i = a; i < b; i++)
#define revrep(i, a, b) for (int i = a; i >= b; i--)
#define pb push_back
#define pii pair<int, int>
#define vi vector<int>
#define vii vector<pii>
#define min3(a, b, c) min(a, min(b, c))
#define max3(a, b, c) max(a, max(b, c))

template <typename T>
using ordered_set = tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>;
template <typename T>
using ordered_multiset = tree<T, null_type, less_equal<T>, rb_tree_tag, tree_order_statistics_node_update>;


ostream &operator<<( ostream &output, const pii &p ) { output << p.first << " " << p.second;return output; }
istream &operator>>( istream &input, pii &p ) { input >> p.first >> p.second;return input; }
template<typename T>
void inline println(vector<T> args){ for(T i: args)cout<<i<<" ";cout<<endl; }
void amax(int& a, int b) { a = max(a, b); }
void amin(int& a, int b) { a = min(a, b); }
int ceilInt(int a, int b) {
    if(!b) return 0;
    if(a%b) return a/b + 1;
    return a/b;
}

int INF = 1e18;
int MOD = 998244353;




void solve()
{
    int a, b; cin>>a>>b;
    int negs = 0, poss = 0;
    vi pos, neg;
    rep(i, 1, a+1) negs += i, pos.pb(i);
    rep(i, 1, b+1) poss += i, neg.pb(i);
    if(negs > poss) {
        neg[neg.size()-1] += abs(negs-poss);
    } else {
        pos[pos.size()-1] += abs(negs-poss);
    }
    for(int i: pos) cout<<i<<" ";
    for(int i: neg) cout<<-i<<" ";
    cout<<endl;
}



signed main()
{

    ios_base::sync_with_stdio(false);
    cin.tie(NULL);

    int t = 1;
    // cin>>t;
    rep(i, 0, t)
    {   
        // cout<<"Case #"<<i+1<<": ";
        solve();
    }
    return 0;
}
#include<iostream>
#include<string.h>
using namespace std;
int main(){
    long long h,w;
    long long a[3000][3000];
    long long s[3000][3000];
    long long smax; //Takahashi - Aoki
    long long posx = 0, posy = 0;
    long long mode = 1; //1 xx　2 xy　3 yx　4 yy 5 xのaoki最適解 6 yのaoki最適解
    long long temp[50];
    long long pt=0;
    long long mode5,mode6;
    string buf;
    cin >> h>> w;
    for (int i = 0; i < (h+5); i++){
        for (int j = 0; j < (w + 5); j++){
            a[i][j] = 0;
        }
    }
    s[1][1] = 0;
    for (int i = 1; i <= h; i++){
        cin >> buf;
        for (int j = 1; j <= w;j++){
            if (buf[j-1] == '+'){
                a[i][j] = 1;
            } else{
                a[i][j] = -1;
            }
        }
    }
    s[h][w] = 0;
    for(int i = h; i >=1; i--){
        for (int j = w; j >= 1; j--){
            if ((i == h) && (j == w)){
            } else {
                if (((i + j) % 2) == 0) { //高橋
                    if (i == h){
                        s[i][j] = s[i][j+1] + a[i][j+1];
                    } else if (j == w){
                        s[i][j] = s[i+1][j] + a[i+1][j];
                    } else{
                        s[i][j] = max(s[i+1][j]+a[i+1][j],s[i][j+1]+a[i][j+1]);
                    }
                } else{ //青木
                    if (i == h){
                        s[i][j] = s[i][j+1] - a[i][j+1];
                    } else if (j == w){
                        s[i][j] = s[i+1][j] - a[i+1][j];
                    } else{
                        s[i][j] = min(s[i+1][j]-a[i+1][j],s[i][j+1]-a[i][j+1]);
                    }
                }
            }
        }
    }
    if (s[1][1] == 0){
        cout << "Draw";
    } else if(s[1][1] > 0){
        cout << "Takahashi";
    } else{
        cout << "Aoki";
    }
}