#include <bits/stdc++.h>

using namespace std;
#define PB push_back
#define MP make_pair
#define LL long long
#define int LL
#define FOR(i,a,b) for(int i = (a); i <= (b); i++)
#define RE(i,n) FOR(i,1,n)
#define REP(i,n) FOR(i,0,(int)(n)-1)
#define R(i,n) REP(i,n)
#define VI vector<int>
#define PII pair<int,int>
#define LD long double
#define FI first
#define SE second
#define st FI
#define nd SE
#define ALL(x) (x).begin(), (x).end()
#define SZ(x) ((int)(x).size())

template<class C> void mini(C& _a4, C _b4) { _a4 = min(_a4, _b4); }
template<class C> void maxi(C& _a4, C _b4) { _a4 = max(_a4, _b4); }

template<class TH> void _dbg(const char *sdbg, TH h){ cerr<<sdbg<<'='<<h<<endl; }
template<class TH, class... TA> void _dbg(const char *sdbg, TH h, TA... a) {
  while(*sdbg!=',')cerr<<*sdbg++;cerr<<'='<<h<<','; _dbg(sdbg+1, a...);
}

template<class T> ostream& operator<<(ostream& os, vector<T> V) {
  os << "["; for (auto& vv : V) os << vv << ","; os << "]";
  return os;
}

#ifdef LOCAL
#define debug(...) _dbg(#__VA_ARGS__, __VA_ARGS__)
#else
#define debug(...) (__VA_ARGS__)
#define cerr if(0)cout
#endif

#define MAX 100101
vector<pair<string,int>> z;
const int ALFA = 'z' - 'a' + 1;
struct node{
  int il;
  int kon;
  vector<pair<int,node*>> d;
};
void build(node* ak,int gl,int po,int ko){
  debug(gl,po,ko);
  if(ko - po == 1){
    ak->kon = z[po].SE;
    return;
  }
  while(z[po].FI[gl] == z[ko-1].FI[gl]){
    gl++;
  }
  while(po != ko){
    int pom = po;
    while(pom < ko && z[pom].FI[gl] == z[po].FI[gl])pom++;
    if(z[po].FI[gl] == 100){
      ak->kon = z[po].SE;
    }else{
      node* xx = new node{pom - po,-1,{}};
      ak->d.PB({z[po].FI[gl],xx});
      build(xx,gl+1,po,pom);
    }
    po = pom;
  }
}

int por[30][30];
int p[30];
int n,q;

vector<pair<string,int>> zap[MAX];
int wyn[MAX];
void dfs(node* x,int il){
  if(x->kon != -1){
    for(auto el:zap[x->kon]){
      int res = il;
      R(i,ALFA)R(j,i){
        res += por[el.FI[j]][el.FI[i]];
      }
      wyn[el.SE] = res;
    }
    
  }
  if(x->kon != -1)il++;
  for(auto el:x->d){
    for(auto el2:x->d){
      por[el2.FI][el.FI] += el2.SE->il;
    }
    dfs(el.SE,il);
    for(auto el2:x->d){
      por[el2.FI][el.FI] -= el2.SE->il;
    }
  }
}
int32_t main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout << fixed << setprecision(11);
  cerr << fixed << setprecision(6);
  cin >> n;
  z.resize(n);
  R(i,n){
    cin >> z[i].FI;
    for(auto& el:z[i].FI)el-='a';
    z[i].FI += char(100);
    z[i].SE = i;
  }
  sort(ALL(z));
  node* korz = new node{n,-1,{}};
  build(korz,0,0,n);
  cin >> q;
  R(i,q){
    int k;
    string z;
    cin >> k >> z;
    for(auto& el:z)el-='a';
    zap[k-1].PB({z,i});
  }
  dfs(korz,0);
//     R(i,SZ(z)){
//       p[z[i]-'a']  = i;
//     } 
//     node *ak = korz;
//     while(1){
//       if(k == 1 && ak->kon != -1){
//         cout << ak->kon + 1 << "\n";
//         break;
//       }
//       if(ak->kon != -1)
//         k--;
//       vector<PII> pom;
//       for(auto el:ak->d){
//         pom.PB({el.FI,el.SE->il});
//       }
//       sort(ALL(pom),[&](PII a,PII b){
//         return p[a.FI] < p[b.FI];
//       });
//       int jak = -1;
//       for(auto el:pom){
//         if(k > el.SE)
//           k -= el.SE;
//         else{
//           jak = el.FI;
//           break;
//         }
//       }
//       debug(jak,k);
//       for(auto el:ak->d){
//         if(el.FI == jak){
//           ak = el.SE;
//           break;
//         }
//       }
//     }
//   }
  R(i,q){
    cout << wyn[i]+1 << "\n";
  }
}


Measured memory_bytes: 27520