#include<bits/stdc++.h>
using namespace std;
typedef pair<int, int >PII;
#define endl '\n'
const int N = 1e6+5;
int son[N][30],idx = 1;
int fa[N],ed[N],cnt[N];
int dp[N];
vector<int>vec;
void insert(string s,int id)
{ int p = 1;
for(auto v : s)
{ int u = v - 'a';
if(!son[p][u]) son[p][u] = ++ idx;
fa[son[p][u]] = p;
p = son[p][u];
cnt[p]++;
}
ed[p] = id;
}
void dfs(int u)
{ int t = 0,x = cnt[u],ans = 0;
for(int i = 0; i <= 25;i++)
{ if(!son[u][i]) continue;
dfs(son[u][i]);
if(cnt[son[u][i]] == x)
t++,ans = dp[son[u][i]];
}
if(t == 1)
dp[u] = ans;
else dp[u] = u;
}
void slove()
{ int n,m;
cin >> n >> m;
int cap = 1;
for(int i = 1;i <= n;i++)
{ string s;
cin >> s;
insert(s,i);
}
string str;
cin >> str;
fa[1] = 1;
dfs(1);
int S = 0;
for(int i = 0;i < m;i++)
{ char c = str[i];
if( c >= 'a' && c <= 'z')
{ if(S || !son[cap][c- 'a'])
{
S++;
continue;
}
cap = son[cap][c - 'a'];
}
else if (c == 'T')
{ if(S) continue;
cap = dp[cap];
}
else if (c == 'B')
{ if(S)
{S--;continue;}
cap = fa[cap];
}
else
{ if(ed[cap] && !S)
cout << ed[cap] << " ";
else cout << -1 << " ";
cap = 1;
S = 0;
}
}
}
signed main()
{
ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
slove();
return 0;
}