using System; using static System.Console; using System.Linq; using System.Collections.Generic; class Program { static int NN => int.Parse(ReadLine()); static string[] SList(long n) => Enumerable.Repeat(0, (int)n).Select(_ => ReadLine()).ToArray(); public static void Main() { Solve(); } static void Solve() { var n = NN; var s = SList(n); var lists = new List<(int id, int len)>[n]; for (var i = 0; i < n; ++i) lists[i] = new List<(int id, int len)>(); for (var i = 0; i < n; ++i) for (var j = i + 1; j < n; ++j) { var len = Math.Min(s[i].Length, s[j].Length) + 1; for (var k = 0; k < s[i].Length && k < s[j].Length; ++k) { if (s[i][k] != s[j][k]) { len = k + 1; break; } } lists[i].Add((j, len)); lists[j].Add((i, len)); } for (var i = 0; i < n; ++i) lists[i].Sort((l, r) => l.len.CompareTo(r.len)); var bitmax = 1 << n; var dp = new long[bitmax]; var mod = 1_000_000_007; var mul = new long[n]; mul[0] = 1; for (var i = 1; i < n; ++i) mul[i] = mul[i - 1] * i % mod; var ans = new long[n]; for (var b = 0; b < bitmax; ++b) { var pc = Popcount(b); if (pc > 0) ans[pc - 1] = (ans[pc - 1] + dp[b]) % mod; for (var i = 0; i < n; ++i) { var next = b | (1 << i); if (b == next) continue; var len = 1; for (var j = lists[i].Count - 1; j >= 0; --j) { if (b != (b | (1 << lists[i][j].id))) { len = lists[i][j].len; break; } } dp[next] = (dp[next] + dp[b] + len * mul[pc]) % mod; } } WriteLine(string.Join("\n", ans)); } static int Popcount(long n) { var c = (n & 0x5555555555555555) + ((n>>1) & 0x5555555555555555); c = (c & 0x3333333333333333) + ((c>>2) & 0x3333333333333333); c = (c & 0x0f0f0f0f0f0f0f0f) + ((c>>4) & 0x0f0f0f0f0f0f0f0f); c = (c & 0x00ff00ff00ff00ff) + ((c>>8) & 0x00ff00ff00ff00ff); c = (c & 0x0000ffff0000ffff) + ((c>>16) & 0x0000ffff0000ffff); c = (c & 0x00000000ffffffff) + ((c>>32) & 0x00000000ffffffff); return (int)c; } }