#include <bits/stdc++.h>
using namespace std;
#define pb push_back
#define CLR(x,y) memset(x,y,sizeof(x))
#define SQ(x) ((x)*(x))
#define ALL(x) (x).begin(),(x).end()
#define LL long long
const int Size = 205055;
/// typ = 1 = insert
/// typ = 2 = query
/// typ = 3 = delete
struct PRR{
int strIdx;
int typ;
int U;
int V;
int Tm;
int idx;
PRR(){
}
PRR(int _strIdx,int _typ,int _U,int _V,int _Tm){
strIdx = _strIdx;
typ = _typ;
U = _U;
V = _V;
Tm = _Tm;
}
};
bool cmp(PRR a,PRR b){
if(a.Tm == b.Tm){
return (a.typ < b.typ);
}
return (a.Tm<b.Tm);
}
int N,Q;
vector<PRR> List;
int typ,U,V,Tm;
LL DP[55][55];
LL RES[Size];
char SS[100005][55];
struct node {
LL cnt;
int child[27];
node(){
}
};
LL NC2(LL N){
if(N<=1) return 0;
return N*(N-1)/2LL;
}
struct trie {
void clear_new_node() {
node newNode;
tree.pb(newNode);
tree[node_ID].cnt = 0;
CLR(tree[node_ID].child, -1);
node_ID++;
}
vector<node> tree;
int node_ID;
void initialize() {
node_ID = 0;
clear_new_node();
}
void insert_word(int idx, int pos, int Len) {
int cur = 0;
for (int i = pos; i < Len; ++i) {
int id = SS[idx][i] - 'a';
if (tree[cur].child[id] == -1) {
tree[cur].child[id] = node_ID;
clear_new_node();
}
cur = tree[cur].child[id];
LL prev = DP[pos][i];
DP[pos][i] -= NC2(tree[cur].cnt);
tree[cur].cnt++;
DP[pos][i] += NC2(tree[cur].cnt);
}
}
void delete_word(int idx, int pos, int Len) {
int cur = 0;
for (int i = pos; i < Len; ++i) {
int id = SS[idx][i] - 'a';
if (tree[cur].child[id] == -1) {
return;
}
cur = tree[cur].child[id];
DP[pos][i] -= NC2(tree[cur].cnt);
tree[cur].cnt--;
DP[pos][i] += NC2(tree[cur].cnt);
}
}
};
trie root[55];
void solve(){
for(int i = 0;i<55;i++) root[i].initialize();
sort(ALL(List),cmp);
CLR(DP,0);
for(int i = 0;i<List.size();i++){
PRR cur = List[i];
if(cur.typ == 2){ /// Query:
RES[cur.idx] = DP[cur.U][cur.V];
}else if(cur.typ == 1){ /// Insert:
int Len = strlen(SS[cur.strIdx]);
for(int p = 0;p<Len;p++){
root[p].insert_word(cur.strIdx,p,Len);
}
}else{ /// Delete:
int Len = strlen(SS[cur.strIdx]);
for(int p = 0;p<Len;p++){
root[p].delete_word(cur.strIdx,p,Len);
}
}
}
for(int i = 0;i<Q;i++){
printf("%lld\n",RES[i]);
}
}
int main () {
scanf("%d",&N);
PRR P;
for(int i = 0;i<N;i++){
scanf("%s %d %d",SS[i],&U,&V);
P.strIdx = i; P.typ = 1; P.Tm = U;
List.pb(P);
P.strIdx = i; P.typ = 3; P.Tm = V;
List.pb(P);
}
scanf("%d",&Q);
for(int i = 0;i<Q;i++){
scanf("%d %d %d",&U,&V,&Tm);
U--;V--;
P.U = U; P.V = V; P.Tm = Tm ;P.typ = 2; P.idx = i;
List.pb(P);
}
solve();
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgojZGVmaW5lIHBiIHB1c2hfYmFjawojZGVmaW5lIENMUih4LHkpIG1lbXNldCh4LHksc2l6ZW9mKHgpKQojZGVmaW5lIFNRKHgpICgoeCkqKHgpKQojZGVmaW5lIEFMTCh4KSAoeCkuYmVnaW4oKSwoeCkuZW5kKCkKI2RlZmluZSBMTCBsb25nIGxvbmcKCmNvbnN0IGludCBTaXplID0gMjA1MDU1OwoKLy8vIHR5cCA9IDEgPSBpbnNlcnQKLy8vIHR5cCA9IDIgPSBxdWVyeQovLy8gdHlwID0gMyA9IGRlbGV0ZQoKc3RydWN0IFBSUnsKICAgIGludCBzdHJJZHg7CiAgICBpbnQgdHlwOwogICAgaW50IFU7CiAgICBpbnQgVjsKICAgIGludCBUbTsKICAgIGludCBpZHg7CiAgICBQUlIoKXsKICAgIH0KICAgIFBSUihpbnQgX3N0cklkeCxpbnQgX3R5cCxpbnQgX1UsaW50IF9WLGludCBfVG0pewogICAgICAgIHN0cklkeCA9IF9zdHJJZHg7CiAgICAgICAgdHlwID0gX3R5cDsKICAgICAgICBVID0gX1U7CiAgICAgICAgViA9IF9WOwogICAgICAgIFRtID0gX1RtOwogICAgfQp9OwoKYm9vbCBjbXAoUFJSIGEsUFJSIGIpewogICAgaWYoYS5UbSA9PSBiLlRtKXsKICAgICAgICByZXR1cm4gKGEudHlwIDwgYi50eXApOwogICAgfQogICAgcmV0dXJuIChhLlRtPGIuVG0pOwp9CgppbnQgTixROwp2ZWN0b3I8UFJSPiBMaXN0OwppbnQgdHlwLFUsVixUbTsKCkxMIERQWzU1XVs1NV07CkxMIFJFU1tTaXplXTsKY2hhciBTU1sxMDAwMDVdWzU1XTsKCnN0cnVjdCBub2RlIHsKICAgIExMIGNudDsKICAgIGludCBjaGlsZFsyN107CiAgICBub2RlKCl7CiAgICB9Cn07CgpMTCBOQzIoTEwgTil7CiAgICBpZihOPD0xKSByZXR1cm4gMDsKICAgIHJldHVybiBOKihOLTEpLzJMTDsKfQoKc3RydWN0IHRyaWUgewogICAgdm9pZCBjbGVhcl9uZXdfbm9kZSgpIHsKICAgICAgICBub2RlIG5ld05vZGU7CiAgICAgICAgdHJlZS5wYihuZXdOb2RlKTsKICAgICAgICB0cmVlW25vZGVfSURdLmNudCA9IDA7CiAgICAgICAgQ0xSKHRyZWVbbm9kZV9JRF0uY2hpbGQsIC0xKTsKICAgICAgICBub2RlX0lEKys7CiAgICB9CgogICAgdmVjdG9yPG5vZGU+IHRyZWU7CiAgICBpbnQgbm9kZV9JRDsKICAgIHZvaWQgaW5pdGlhbGl6ZSgpIHsKICAgICAgICBub2RlX0lEID0gMDsKICAgICAgICBjbGVhcl9uZXdfbm9kZSgpOwogICAgfQoKICAgIHZvaWQgaW5zZXJ0X3dvcmQoaW50IGlkeCwgaW50IHBvcywgaW50IExlbikgewogICAgICAgIGludCBjdXIgPSAwOwogICAgICAgIGZvciAoaW50IGkgPSBwb3M7IGkgPCBMZW47ICsraSkgewogICAgICAgICAgICBpbnQgaWQgPSBTU1tpZHhdW2ldIC0gJ2EnOwogICAgICAgICAgICBpZiAodHJlZVtjdXJdLmNoaWxkW2lkXSA9PSAtMSkgewogICAgICAgICAgICAgICAgdHJlZVtjdXJdLmNoaWxkW2lkXSA9IG5vZGVfSUQ7CiAgICAgICAgICAgICAgICBjbGVhcl9uZXdfbm9kZSgpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGN1ciA9IHRyZWVbY3VyXS5jaGlsZFtpZF07CiAgICAgICAgICAgIExMIHByZXYgPSBEUFtwb3NdW2ldOwogICAgICAgICAgICBEUFtwb3NdW2ldIC09IE5DMih0cmVlW2N1cl0uY250KTsKICAgICAgICAgICAgdHJlZVtjdXJdLmNudCsrOwogICAgICAgICAgICBEUFtwb3NdW2ldICs9IE5DMih0cmVlW2N1cl0uY250KTsKICAgICAgICB9CiAgICB9CgogICAgdm9pZCBkZWxldGVfd29yZChpbnQgaWR4LCBpbnQgcG9zLCBpbnQgTGVuKSB7CiAgICAgICAgaW50IGN1ciA9IDA7CiAgICAgICAgZm9yIChpbnQgaSA9IHBvczsgaSA8IExlbjsgKytpKSB7CiAgICAgICAgICAgIGludCBpZCA9IFNTW2lkeF1baV0gLSAnYSc7CiAgICAgICAgICAgIGlmICh0cmVlW2N1cl0uY2hpbGRbaWRdID09IC0xKSB7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY3VyID0gdHJlZVtjdXJdLmNoaWxkW2lkXTsKICAgICAgICAgICAgRFBbcG9zXVtpXSAtPSBOQzIodHJlZVtjdXJdLmNudCk7CiAgICAgICAgICAgIHRyZWVbY3VyXS5jbnQtLTsKICAgICAgICAgICAgRFBbcG9zXVtpXSArPSBOQzIodHJlZVtjdXJdLmNudCk7CiAgICAgICAgfQogICAgfQp9OwoKdHJpZSByb290WzU1XTsKCnZvaWQgc29sdmUoKXsKICAgIGZvcihpbnQgaSA9IDA7aTw1NTtpKyspIHJvb3RbaV0uaW5pdGlhbGl6ZSgpOwogICAgc29ydChBTEwoTGlzdCksY21wKTsKICAgIENMUihEUCwwKTsKCiAgICBmb3IoaW50IGkgPSAwO2k8TGlzdC5zaXplKCk7aSsrKXsKICAgICAgICBQUlIgY3VyID0gTGlzdFtpXTsKICAgICAgICBpZihjdXIudHlwID09IDIpeyAvLy8gUXVlcnk6CiAgICAgICAgICAgIFJFU1tjdXIuaWR4XSA9IERQW2N1ci5VXVtjdXIuVl07CiAgICAgICAgfWVsc2UgaWYoY3VyLnR5cCA9PSAxKXsgLy8vIEluc2VydDoKICAgICAgICAgICAgaW50IExlbiA9IHN0cmxlbihTU1tjdXIuc3RySWR4XSk7CiAgICAgICAgICAgIGZvcihpbnQgcCA9IDA7cDxMZW47cCsrKXsKICAgICAgICAgICAgICAgIHJvb3RbcF0uaW5zZXJ0X3dvcmQoY3VyLnN0cklkeCxwLExlbik7CiAgICAgICAgICAgIH0KICAgICAgICB9ZWxzZXsgLy8vIERlbGV0ZToKICAgICAgICAgICAgaW50IExlbiA9IHN0cmxlbihTU1tjdXIuc3RySWR4XSk7CiAgICAgICAgICAgIGZvcihpbnQgcCA9IDA7cDxMZW47cCsrKXsKICAgICAgICAgICAgICAgIHJvb3RbcF0uZGVsZXRlX3dvcmQoY3VyLnN0cklkeCxwLExlbik7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgZm9yKGludCBpID0gMDtpPFE7aSsrKXsKICAgICAgICBwcmludGYoIiVsbGRcbiIsUkVTW2ldKTsKICAgIH0KfQoKaW50IG1haW4gKCkgewoKICAgIHNjYW5mKCIlZCIsJk4pOwogICAgUFJSIFA7CiAgICBmb3IoaW50IGkgPSAwO2k8TjtpKyspewogICAgICAgIHNjYW5mKCIlcyAlZCAlZCIsU1NbaV0sJlUsJlYpOwogICAgICAgIFAuc3RySWR4ID0gaTsgUC50eXAgPSAxOyBQLlRtID0gVTsKICAgICAgICBMaXN0LnBiKFApOwogICAgICAgIFAuc3RySWR4ID0gaTsgUC50eXAgPSAzOyBQLlRtID0gVjsKICAgICAgICBMaXN0LnBiKFApOwogICAgfQoKICAgIHNjYW5mKCIlZCIsJlEpOwogICAgZm9yKGludCBpID0gMDtpPFE7aSsrKXsKICAgICAgICBzY2FuZigiJWQgJWQgJWQiLCZVLCZWLCZUbSk7CiAgICAgICAgVS0tO1YtLTsKICAgICAgICBQLlUgPSBVOyBQLlYgPSBWOyBQLlRtID0gVG0gO1AudHlwID0gMjsgUC5pZHggPSBpOwogICAgICAgIExpc3QucGIoUCk7CiAgICB9CiAgICBzb2x2ZSgpOwogICAgcmV0dXJuIDA7Cn0K