#include <iostream>
#include<vector>
#include<string.h>
#include<stdio.h>
#include<cmath>
using namespace std;
int main(){
int b,t;
char s[1000005]; //存的时候使用2维数组去存储 因为s要求的长度太长了
int c;
scanf("%d",&t);
while(t--){
vector<vector<int> > p(27); //这个相当于2维数组的定义方法
memset(s,0,sizeof(s));
scanf("%s",s);
int length=strlen(s);
for(int i=0;i<length;i++){
p[s[i]-'a'].push_back(i);
}
int m;
scanf("%d",&m);
for (int i=0;i<m;i++){
char temp[20];
scanf("%s\n",temp); //读取字符串的时候要把空格读进来
if(strcmp(temp,"INSERT")==0){
char ch;
scanf("%c",&ch);
s[length]=ch; //s[length]:'\0' a
s[length+1]='\0'; //保持字符串的完整性
p[ch-'a'].push_back(length);
length=length+1;
}
else if(strcmp(temp,"QUERY")==0){
int x;
scanf("%d",&x);
if(p[s[x]-'a'].size()==1){ //数组的长度是1说明只有它自己一个元素
printf("-1\n");
}
else{
int min_value=100000000;
for(int j=0;j<p[s[x]-'a'].size();j++){
if(abs(p[s[x]-'a'][j]-x)<min_value&&abs(p[s[x]-'a'][j]-x)!=0)
min_value=abs(p[s[x]-'a'][j]-x);
}
printf("%d\n",min_value);
}
}
}
}
return 0;
}