import sequtils,strutils,math const Mo : int64 = 1_000_000_007 var N = stdin.readline.parseInt s : string S = newSeq[string](0) dp : array[1100_000, int64] P : array[21,int64] ans : array[21, int64] cnts : array[21, int64] lcm : array[21, array[21,int64]] P[0] = 1 for i in 1..20: P[i] = P[i - 1] * i for n in 1..N: s = stdin.readline & " " S.add(s) for i,s1 in S: for j,s2 in S: if i == j: continue for k in 0..min(s1.high,s2.high): if s1[k] != s2[k]: lcm[i][j] = k + 1 lcm[j][i] = k + 1 break for i in 0..<(1 shl N): #echo i, " ",countBits32(i.int32), " ",dp[i] var bc = countBits32(i.int32) ans[bc] = (ans[bc] + dp[i]) mod Mo for k in 0..<N: cnts[k] = 1 for k in 0..<N: if (i and (1 shl k)) == 0: for j in (k + 1)..<N: if (i and (1 shl j)) == 0: cnts[k] = max(cnts[k], lcm[k][j]) cnts[j] = max(cnts[j], lcm[k][j]) for k in 0..<N: if (i and (1 shl k)) == 0: dp[i + (1 shl k)] += (dp[i] + cnts[k] * P[bc]) mod Mo for i in 1..N: echo ans[i]