//---------------------------------------------------------------
#include <bits/stdc++.h>
using namespace std;
#include <cstdlib>
#include <cmath>
#include <math.h>
#include <sstream>
#include <numeric>
#include <cassert>
//---------------------------------------------------------------
#define rep(i, n) for (long long i = 0; i < (long long)(n); i++)
#define rrep(i, n) for (long long i = 1; i <= (long long)(n); i++)
#define srep(i, s, n) for (long long i = (s); i <= (long long)(n); i++)
#define drep(i,n) for(long long i = (n)-1; i >= 0; --i)
#define SIZE 100005
#define INF 1e18
#define all(x) x.begin(),x.end()
#define fi first
#define se second
#define vec vector
using pint = pair<int,int>;
using ll = long long;
using vll = vector<long long>;
using vvll = vector<vector<long long>>;
using pll = pair<long long, long long>;
//---------------------------------------------------------------
template<class T> inline bool chmin(T& a, T b) { if (a > b) { a = b; return true; } return false; }
template<class T> inline bool chmax(T& a, T b) { if (a < b) { a = b; return true; } return false; }
const int dx[4] = {1, 0, -1, 0};
const int dy[4] = {0, 1, 0, -1};
//---------------------------------------------------------------
struct Edge {
    ll to;
    ll w;
    Edge(ll to, ll w) : to(to), w(w) {}
};
using Graph = vector<vector<Edge>>;
//↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

int main() {
    ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);

	ll n,m;
	cin>>n>>m;

	map<ll , vll> mp;
	rep(i,m){
		ll x,y;
		cin>>x>>y;
		mp[x].push_back(y);
	}

	//sort(all(mp));はしなくてもよい。昇順で入っている。多分。
	set<ll> ans;
	set<ll> s; //任意のxについて黒ポーンのあるy座標を格納する。
	s.insert(n);

	for(auto p : mp){

		vector<ll> add;//次にいる場所
		
		for(auto y : p.second){
			
			//一つ前の段階でどの座標にいるか調べる。
			if(s.count(y+1)) {
				add.push_back(y);
			}else if(s.count(y-1)){
				add.push_back(y);
			}

			//白の場合はそのまま降ってくるので処理は不要。

		}

		for(auto i : p.second) s.erase(i);
		for(auto i : add) s.insert(i);
	}


	cout<<s.size()<<endl;
	return 0;
}
#include<bits/stdc++.h>
#define int long long
#define maxn 200010
// #define mod 
using namespace std;
// template<class T>T ABS(T x) {return x<0?-x:x;}
//int ksm(int x,int y) {int r=1;while(y) y&1?r=1ll*r*x%mod:0,x=1ll*x*x%mod,y>>=1;return r;}
int read()
{
	int s=0,w=1;
	char ch=getchar();
	while(ch<'0'||ch>'9') {if(ch=='-')w=-1;ch=getchar();}
	while(ch>='0'&&ch<='9') s=(s<<3)+(s<<1)+(ch^48),ch=getchar();
	return s*w;
}
// struct Edge{int to,next;}a[maxn];
// int h[maxn],cnt;
// void add(int x,int y) {a[++cnt]=(Edge){y,h[x]},h[x]=cnt,a[++cnt]=(Edge){x,h[y]},h[y]=cnt;}
char S[maxn],X[maxn];
int T[10],B[10],pw[maxn],n;
signed main()
{
	n=read();
	scanf("%s%s",S+1,X+1);
	B[0]=1;
	pw[0]=1;for(int i=1;i<n;i++) pw[i]=pw[i-1]*10%7;
	for(int i=n;i;i--)
		if(X[i]=='A')
		{
			for(int j=0;j<7;j++) T[j]=B[j];
			for(int j=0;j<7;j++) B[j]=T[j]&T[((j+(S[i]-'0')*pw[n-i])%7+7)%7];
		}
		else
		{
			for(int j=0;j<7;j++) T[j]=B[j];
			for(int j=0;j<7;j++) B[j]=T[j]|T[((j+(S[i]-'0')*pw[n-i])%7+7)%7];
		}
	cout<<(B[0]?"Takahashi":"Aoki")<<'\n';
	return 0;
}