#include<stdio.h>
#include<string.h>
int Find(char* string,char * str){
int i=0,j=0;
while(i<strlen(string)&&j<strlen(str)){
if(*(str+j)==*(string+i)){
i++;
j++;
}else{
j=0;
i=i-j+1;
}
}
if(j==strlen(str)){
return i-j;
}
else
return -1;
}
int main(){
int q, l;
char string[200];
scanf("%d",&q);
getchar();
fgets(string,101,stdin);
char *find = strchr(string, '\n');
if(find)
*find = '\0';
for(int i=0;i<q;i++){
char op[50];
fgets(op,50,stdin);
if(op[0]=='1'){
strcat(string,op+2);
char *find = strchr(string,'\n');
if(find)
*find = '\0';
printf("%s",string);
if(i<q-1){
printf("\n");
}
}else if(op[0]=='2'){
char str1[3],str2[3];
int len;
sscanf(op+2,"%[^ ]",str1);
len=strlen(str1);
sscanf(op+3+len,"%[^\n]",str2);
int num1=atoi(str1);
int num2=atoi(str2);
strcpy(string,string+num1);
string[num2]='\0';
printf("%s",string);
if(i<q-1){
printf("\n");
}
}else if(op[0]=='3'){
char str1[3],str2[20];
sscanf(op+2,"%[^ ]",str1);
int len,l;
l=strlen(str1);
sscanf(op+3+l,"%[^\n]",str2);
len=strlen(str2);
int num1=atoi(str1);
char strtmp[101];
strcpy(strtmp,string+num1);
strcpy(string+num1,str2);
strcpy(string+len+num1,strtmp);
printf("%s",string);
if(i<q-1){
printf("\n");
}
}else{
char str[101];
strcpy(str,op+2);
char *find = strchr(str,'\n');
if(find)
*find = '\0';
int index=Find(string,str);
printf("%d",index);
if(i<q-1){
printf("\n");
}
}
}
return 0;
}