Problem:
Score : 1100 points

Problem Statement

There are N strings of lowercase alphabet only. The i-th string is S_i. Every string is unique.

Provide answers for the Q queries below. The i-th query has the following format:

Query: An integer k_i and a string p_{i,1}p_{i,2}...p_{i,26} that results from permuting {a,b,...,z} are given. Output the sequence of the string S_{k_i} among the N strings in lexicographical order when the literal sequence is p_{i,1}<p_{i,2}<...<p_{i,26}.

Constraints

1 ≦ N,Q ≦ 100000

1 ≦ |S_i| (1 ≦ i ≦ N)

S_i (1 ≦ i ≦ N) is a string of lowercase alphabet.

The sum of |S_i| is no more than 400000.

Every S_i is unique.

1 ≦ k_i ≦ N (1 ≦ i ≦ Q)

For all 1 ≦ i ≦ Q, p_{i,1}p_{i,2}...p_{i,26} is a permutation of abcd...z.

Input

Inputs are provided from standard inputs in the following form.

N
S_1
:
S_N
Q
k_1 p_{1,1}p_{1,2}...p_{1,26}
:
k_Q p_{Q,1}p_{Q,2}...p_{Q,26}

Output

Output Q lines.

On line i, for the i-th query, output an integer indicating the sequence of the string S_{k_i} among the N strings in lexicographical order.

Sample Input 1

5
aa
abbaa
abbba
aaab
aaaaaba
5
1 abcdefghijklmnopqrstuvwxyz
2 bacdefghijklmnopqrstuvwxyz
3 abcdefghijklmnopqrstuvwxyz
4 bacdefghijklmnopqrstuvwxyz
5 abcdefghijklmnopqrstuvwxyz

Sample Output 1

1
2
5
4
2

When the literal sequence is a < b, sorting the input strings in lexicographical order yields aa, aaaaaba, aaab, abbaa, abbba. The answers to queries 1, 3, and 5 are thus 1, 5, and 2, respectively.

When the literal sequence is b < a, sorting the input strings in lexicographical order yields abbba, abbaa, aa, aaab, aaaaaba. The answers to queries 2 and 4 are thus 2 and 4, respectively.

Sample Input 2

8
abrakatabra
abadaba
abracadabra
atcoder
grand
contest
ababa
a
6
3 abcdefghijklmnopqrstuvwxyz
6 qwertyuiopasdfghjklzxcvbnm
8 poiuytrewqlkjhgfdsamnbvcxz
2 qazwsxedcrfvtgbyhnujmikolp
1 plokmijnuhbygvtfcrdxeszwaq
4 mnbvcxzasdfghjklpoiuytrewq

Sample Output 2

4
8
2
3
4
7

Solution in Go (1.6) (judge verdict: Memory Limit Exceeded)

package main

import (
  "bufio"
  "fmt"
  "os"
  "strconv"
  "strings"
)

var s []string
var c [][][]int
var a []int

func main() {
  input := Input{bufio.NewReaderSize(os.Stdin,100)}
  n := input.NextInt()
  s = make([]string,n)
  c = make([][][]int,n)
  a = make([]int,n)
  for i:=0;i<n;i++ {
    s[i] = input.NextLine()
    c[i] = make([][]int,26)
    for j:=0;j<26;j++ { c[i][j] = make([]int,26) }
  }
  q := input.NextInt()
  if n == 1 {
    for i:=q;i>0;i-- { fmt.Println(1) }
    return
  }
  x := make([]int,n)
  for i:=0;i<n;i++ { x[i] = i }
  dfs(x,0)
  r := make([]int,26)
  for i:=0;i<q;i++ {
    k,p := input.NextQuery()
    k--
    ans := a[k]+1
    for i:=0;i<26;i++ { r[ctoi(p[i:i+1])] = i }
    for i:=0;i<26;i++ {
      for j:=0;j<26;j++ {
        if r[j] < r[i] { ans += c[k][i][j] }
      }
    }
    fmt.Println(ans)
  }
}

func ctoi(s string) int { return int([]rune(s)[0])-97 }

func dfs(x []int,l int) {
  k := 0
  p := make([][]int,26)
  for i:=0;i<len(x);i++ {
    if len(s[x[i]]) <= l { k++;continue }
    t := ctoi(s[x[i]][l:l+1])
    p[t] = append(p[t],x[i])
  }
  for i:=0;i<len(x);i++ {
    if len(s[x[i]]) <= l { continue }
    a[x[i]] += k
    t := ctoi(s[x[i]][l:l+1])
    for j:=0;j<26;j++ { c[x[i]][t][j] += len(p[j]) }
  }
  for i:=0;i<26;i++ {
    if len(p[i]) > 0 { dfs(p[i],l+1) }
  }
}

type Input struct { reader *bufio.Reader }
func(i *Input) NextLine() string {
  var buffer []byte
  for {
    line,isPrefix,err := i.reader.ReadLine()
    if err != nil { panic(err) }
    buffer = append(buffer,line...)
    if !isPrefix { break }
  }
  return string(buffer)
}
func(i *Input) NextInt() int {
  n,_ := strconv.Atoi(i.NextLine())
  return n
}
func(i *Input) NextQuery() (int,string) {
  s := strings.Fields(i.NextLine())
  x,_ := strconv.Atoi(s[0])
  return x,s[1]
}