N = int(input()) A = [[*input()] for _ in range(N)] trie = [dict()] count = [0] for a in A: curr = 0 count[0] += 1 for c in a: if c in trie[curr]: to = trie[curr][c] else: to = len(trie) trie.append(dict()) count.append(0) trie[curr][c] = to count[to] += 1 curr = to Q = int(input()) curr = 0 stack = [0] ans = N for _ in range(Q): cmd, *query = input().split() cmd = int(cmd) if cmd == 1: x = query[0] if x in trie[curr]: to = trie[curr][x] else: to = len(trie) trie.append(dict()) count.append(0) trie[curr][x] = to stack.append(to) curr = to elif cmd == 2: stack.pop() curr = stack[-1] else: print(count[curr])