import sys import functools class SegtreeSum: def __init__(self, a): if type(a) is int: a = [0] * a n = len(a) size = 1 while size < n: size <<= 1 self.tree = [0] * (size * 2) for i, x in enumerate(a): self.tree[size + i] = x for i in reversed(range(1, size)): self.tree[i] = (self.tree[i << 1] + self.tree[i << 1 | 1]) % MOD self.size = size def __getitem__(self, p): return self.tree[self.size + p] def __setitem__(self, p, a): p += self.size self.tree[p] = a while p > 1: p >>= 1 self.tree[p] = (self.tree[p << 1] + self.tree[p << 1 | 1]) % MOD def fold(self, l, r): x = 0 l += self.size r += self.size while l < r: if l & 1 != 0: x += self.tree[l] x %= MOD l += 1 l >>= 1 if r & 1 != 0: r -= 1 x += self.tree[r] x %= MOD r >>= 1 return x N, L, Q = map(int, input().split()) MOD = (1 << 61) - 1 BASE = 0x1234567 POW = [1] * L for i in range(1, L): POW[i] = POW[i - 1] * BASE % MOD def convert(s): return [(ord(s[i]) - 0x61 + 1) * POW[i] % MOD for i in range(len(s))] S = [SegtreeSum(convert(input().strip())) for _ in range(N)] for _ in range(Q): query = input().strip().split() if query[0] == "1": k = int(query[1]) - 1 c = (ord(query[2]) - 0x61 + 1) * POW[k] % MOD d = (ord(query[3]) - 0x61 + 1) * POW[k] % MOD for s in S: if s[k] == c: s[k] = d else: t = convert(query[1]) h = functools.reduce(lambda x, y: (x + y) % MOD, t) l = len(t) ans = 0 for s in S: if s.fold(0, l) == h: ans += 1 print(ans)