#include <iostream>
#include <cstring>
using namespace std;
const int N = 1e5+6;
int next[N];
void init(int len,string ch)
{
int j=-1;
int i=0;
next[0]=-1;
while(i<len)
{
if(j==-1||ch[i]==ch[j]){//相同情况两个一起换位置
i++;j++;
next[i]=j;
}
else j=next[j];//回退到之前匹配的地方 和现在位置做比较
}
}
int kmp(int n,int m,string nn,string mm)
{
int i=0,j=0;
while(i<n)
{
if(nn[i]==mm[i]||j==-1)
{
i++;j++;
}
else j=next[j];
if(j==m) return i-m+1;
}
}
int main()
{
string s,s1,s2,s3;
int n;
cin>>n>>s;
int x;
for(int i=1;i<=4;i++)
{
cin>>x;
if(x==1) cin>>s1,s=s+s1,cout<<s<<endl;
if(x==2)
{
int a,b;
cin>>a>>b;
int k=0;
for(int j=a;j<=a+b;j++)
{
s2+=s[j];
}
s=s2;
cout<<s<<endl;
}
if(x==3)
{
int a,k=0;
cin>>a>>s3;
string s4;
for(int i=0;i<a;i++)
{
s4+=s[i];
}
s=s4;
cout<<s+s3<<endl;
}
if(x==4)
{
string s5;
cin>>s5;
int len1=s.size();
int len=s5.size();
init(len,s5);
cout<<kmp(len1,len,s,s5);
}
}
}