#include #include using namespace std; using namespace atcoder; using ull=unsigned long long; const ull mod=(1ULL<<61)-1; ull op(ull a, ull b){return (a+b)%mod;} ull e(){return 0;} struct rolling_hash { int _n=3030; segtreeseg=segtree(_n); rolling_hash()=default; rolling_hash(string s, ull b):S(s),base(b) { int n=S.size(); assert(n<_n); for(int i=0;ibase_pow=vector(_n); ull mul(ull a, ull b) { ull au=a>>31,ad=a&mask31; ull bu=b>>31,bd=b&mask31; ull m=ad*bu+au*bd; ull mu=m>>30,md=m&mask30; return calc_mod(2*au*bu+mu+(md<<31)+ad*bd); } ull calc_mod(ull v) { ull vu=v>>61,vd=v&mod; ull res=vu+vd; if(res>=mod)res-=mod; return res; } ull pow(ull a, ull n) { ull res=1; while(n) { if(n&1)res=mul(res,a); a=mul(a,a); n/=2; } return res%mod; } }; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); srand(time(NULL)); const int base=rand()%100000+1; int N,L,Q; cin>>N>>L>>Q; vectorS(N); for(int i=0;i>S[i]; vectorRH; for(int i=0;i>t; if(t==1) { int p; char C,D; cin>>p>>C>>D; p--; for(int i=0;i>T; ull hashT=rolling_hash(T,base).all_hash(); int ans=0; for(int i=0;i