#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=5e5+5,maxx=1e6+5;
int q,n,m,nxt[maxx];
long long ans;
string s;
vector<string>a[maxn];
inline void GetNext(string s2){
int len=s2.size();
int i=0,j=-1;
nxt[0]=-1;
while(i<len){
if(j==-1||s2[i]==s2[j]){
i++;
j++;
if(s2[i]!=s2[j]) nxt[i]=j;
else nxt[i]=nxt[j];
}
else j=nxt[j];
}
}
inline long long kmp(string s1,string s2){
long long cnt=0;
GetNext(s2);
int lens1=s1.size(),lens2=s2.size();
int i=0,j=0;
while(i<lens1){
while(i<lens1&&j<lens2){
if(j==-1||s1[i]==s2[j]){
i++;
j++;
}
else j=nxt[j];
}
if(j==lens2){
cnt++;
j=0;
}
}
return cnt;
}
int main(){
ios::sync_with_stdio(false);
cin>>q;
int i=0;
while(++i<=q){
cin>>n>>m>>s;
if(n==1){
for(int j=0;j<a[m].size();j++)
a[i].push_back(a[m][j]);
a[i].push_back(s);
}
else{
ans=0;
if(m==0) cout<<0<<endl;
else{
for(int j=0;j<a[m].size();j++)
a[i].push_back(a[m][j]);
for(int j=0;j<a[m].size();j++)
ans+=kmp(s,a[m][j]);
cout<<ans<<endl;
}
}
}
return 0;
}