#pragma GCC optimize("Ofast")
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define pb push_back
#define mp make_pair
#define mt make_tuple
#define pii pair<int,int>
#define pll pair<ll,ll>
#define ldb double
template<typename T>void ckmn(T&a,T b){a=min(a,b);}
template<typename T>void ckmx(T&a,T b){a=max(a,b);}
void rd(int&x){scanf("%i",&x);}
void rd(ll&x){scanf("%lld",&x);}
void rd(char*x){scanf("%s",x);}
void rd(ldb&x){scanf("%lf",&x);}
void rd(string&x){scanf("%s",&x);}
template<typename T1,typename T2>void rd(pair<T1,T2>&x){rd(x.first);rd(x.second);}
template<typename T>void rd(vector<T>&x){for(T&i:x)rd(i);}
template<typename T,typename...A>void rd(T&x,A&...args){rd(x);rd(args...);}
template<typename T>void rd(){T x;rd(x);return x;}
int ri(){int x;rd(x);return x;}
template<typename T>vector<T> rv(int n){vector<T> x(n);rd(x);return x;}
template<typename T>void ra(T a[],int n,int st=1){for(int i=0;i<n;++i)rd(a[st+i]);}
template<typename T1,typename T2>void ra(T1 a[],T2 b[],int n,int st=1){for(int i=0;i<n;++i)rd(a[st+i]),rd(b[st+i]);}
template<typename T1,typename T2,typename T3>void ra(T1 a[],T2 b[],T3 c[],int n,int st=1){for(int i=0;i<n;++i)rd(a[st+i]),rd(b[st+i]),rd(c[st+i]);}
void re(vector<int> E[],int m,bool dir=0){for(int i=0,u,v;i<m;++i){rd(u,v);E[u].pb(v);if(!dir)E[v].pb(u);}}
template<typename T>void re(vector<pair<int,T>> E[],int m,bool dir=0){for(int i=0,u,v;i<m;++i){T w;rd(u,v,w);E[u].pb({v,w});if(!dir)E[v].pb({u,w});}}

const int mod=998244353;
int add(int a,int b){a+=b;return a>=mod?a-mod:a;}
void ckadd(int&a,int b){a=add(a,b);}
int sub(int a,int b){a-=b;return a<0?a+mod:a;}
void cksub(int&a,int b){a=sub(a,b);}
int mul(int a,int b){return (ll)a*b%mod;}
void ckmul(int&a,int b){a=mul(a,b);}
int powmod(int x,int k){int ans=1;for(;k;k>>=1,ckmul(x,x))if(k&1)ckmul(ans,x);return ans;}
int inv(int x){return powmod(x,mod-2);}

const int N=5050;
int a[N][N],dp[N][N];
int main(){
	int h,w,k;
	rd(h,w,k);
	for(int i=1;i<=k;i++){
		int x,y;char c;
		scanf("%i %i %c",&x,&y,&c);
		if(c=='R')a[x][y]=1;
		if(c=='D')a[x][y]=2;
		if(c=='X')a[x][y]=3;
	}
	int i3_2=mul(2,inv(3));
	dp[1][1]=powmod(3,h*w-k);
	for(int i=1;i<=h;i++){
		for(int j=1;j<=w;j++){
			if(i!=h){
				if(a[i][j]&2)ckadd(dp[i+1][j],dp[i][j]);
				if(a[i][j]==0)ckadd(dp[i+1][j],mul(dp[i][j],i3_2));
			}
			if(j!=w){
				if(a[i][j]&1)ckadd(dp[i][j+1],dp[i][j]);
				if(a[i][j]==0)ckadd(dp[i][j+1],mul(dp[i][j],i3_2));
			}
		}
	}
	printf("%i\n",dp[h][w]);
	return 0;
}
#include <bits/stdc++.h>
using namespace std;

#define REP(i, n) for(int i = 0; i < (int)(n); ++i)
#define FOR(i, a, b) for(int i = (int)(a); i <= (int)(b); ++i)
#define FORR(i, a, b) for(int i = (int)(a); i >= (int)(b); --i)
#define ALL(c) (c).begin(), (c).end()

using ll = long long;
using VI = vector<int>;
using VL = vector<ll>;
using VD = vector<double>;
using VII = vector<VI>;
using VLL = vector<VL>;
using VDD = vector<VD>;
using P = pair<int, int>;
using PL = pair<ll, ll>;

template <typename T>
bool chmax(T& a, const T& b) {
  if(a < b) {
    a = b;
    return true;
  }
  return false;
}
template <typename T>
bool chmin(T& a, const T& b) {
  if(a > b) {
    a = b;
    return true;
  }
  return false;
}

void solve(long long N, string S, std::string X) {
  VII dp(N + 1, VI(7, 0));
  dp[N][0] = 1;
  FORR(i, N, 1) {
    FOR(j, 0, 6) {
      int num = S[i - 1] - '0';
      if(X[i - 1] == 'T') {
        if(dp[i][10 * j % 7] || dp[i][(10 * j + num) % 7]) {
          dp[i - 1][j] = 1;
        }
      }
      if(X[i - 1] == 'A') {
        if(dp[i][10 * j % 7] && dp[i][(10 * j + num) % 7]) {
          dp[i - 1][j] = 1;
        }
      }
    }
  }
  if(dp[0][0]) {
    cout << "Takahashi" << endl;
  } else {
    cout << "Aoki" << endl;
  }
}

int main() {
  long long N;
  scanf("%lld", &N);
  string S;
  cin >> S;
  std::string X;
  std::cin >> X;
  solve(N, S, X);
  return 0;
}
