#include <stdio.h>
#include <algorithm>
#include <string.h>
#include <assert.h>
#define DEBUG if(0)
#define lli long long int
#define ldouble long double
using namespace std;

const int maxN = 2e5; int n;
char s[maxN + 1], x[maxN + 1];
int nums[maxN];

// 1 Aoki, -1 Takahashi
int digits[6] = {1, 3, 2, 6, 4, 5};
int memo[maxN][7];
int solve(int i = 0, int curr = 0)
{
  if (i == n)
    return curr == 0 ? -1 : 1;

  int &ans = memo[i][curr];
  if (ans != -2)
    return ans;

  int zero = solve(i + 1, curr);
  int other = solve(i + 1, (curr + nums[i]) % 7);
  if (x[i] == 'A')
    ans = max(zero, other);
  else // Takahashi
    ans = min(zero, other);
  return ans;
}

int main()
{
  while (~scanf("%d", &n))
  {
    scanf(" %s", s);
    for (int i = 0; i < n; i++)
      nums[i] = (int)(s[i] - '0') * digits[(n - 1 - i) % 6];
    scanf(" %s", x);
    DEBUG printf("%d - %s - %s\n", n, s, x);

    for (int i = 0; i < n; i++)
      for (int j = 0; j < 7; j++)
        memo[i][j] = -2;
    int ans = solve();
    printf("%s\n", ans == 1 ? "Aoki" : "Takahashi");
  }
  return 0;
}
#include <cstdio>
#include <vector>

using namespace std;


int N;
const int MAXN=2e5+7;
char S[MAXN],X[MAXN];   

int CUR=0;
bool NUM[MAXN][7],dp[MAXN][7],range[MAXN][7];


int exp(int e){
    if (e==0) return 1;

    int tmp=exp(e/2);

    if (e%2) return tmp*tmp*10%7;
    else return tmp*tmp%7;
}

int main(){

    scanf("%d",&N);
    scanf("%s",S);
    scanf("%s",X);

    if (X[0]=='A'){
        NUM[CUR][0]=true;
        CUR++;
    }

    int l=0;
    while(l<N){
        int r=l;
        while(r<N&&X[r]==X[l]) r++;
        // printf("l=%d\n",l);
        
        fill(dp[l],dp[l]+7,false);
        dp[l][0]=true;
        dp[l][(S[l]-'0')%7]=true;

        for(int i=l;i<r-1;i++){
            for(int m=0;m<7;m++){
                if (!dp[i][m]) continue;
                
                int digit=S[i+1]-'0';
                int m0=m*10%7;

                dp[i+1][m0]=true;
                dp[i+1][(m0+digit)%7]=true;
            }
        }

        for(int m=0;m<7;m++){
            if (!dp[r-1][m]) continue;
            // printf("m=%d\n",m);
            int value=m*exp(N-r)%7;
            // printf("value=%d\n",value);

            NUM[CUR][value]=true;
        }
        // puts("OK!");
        CUR++;
        l=r;
    }

    if (X[N-1]=='T') NUM[CUR++][0]=true;
    // puts("OK");

    // for(int i=0;i<CUR;i++){
    //     for(int k=0;k<7;k++){
    //         if (NUM[i][k])
    //             printf("%d ",k);
    //     }

    //     putchar('\n');
    // }

    range[CUR][0]=true;
    for(int cur=CUR-1;cur>=0;cur--){
        const auto & action=NUM[cur], &r=range[cur+1];

        if (cur%2){
            for(int i=0;i<7;i++){
                bool ng=true;
                for(int j=0;j<7;j++){
                    if (!action[j]) continue;
                    ng=ng&&(r[(i+j)%7]);
                }

                if (ng) range[cur][i]=true;
            }
        }else{
            for(int i=0;i<7;i++){
                for(int j=0;j<7;j++){
                    if (!action[j]) continue;
                    if (r[(i+j)%7]) range[cur][i]=true;
                }
            }
        }
    }

    if (range[0][0]) puts("Takahashi");
    else puts("Aoki");

    return 0;
}