using System; using static System.Console; using System.Linq; using System.Collections.Generic; class Program { static int NN => int.Parse(ReadLine()); static int[] NList => ReadLine().Split().Select(int.Parse).ToArray(); static int[][] NArr(long n) => Enumerable.Repeat(0, (int)n).Select(_ => NList).ToArray(); public static void Main() { Solve(); } static void Solve() { var map = NArr(16); var dic = new Dictionary(); var ans = new long[16]; foreach (var ncr in NCRList(16, 4)) { var li = new long[16]; li[Win(Win(ncr[0], ncr[1], map), Win(ncr[2], ncr[3], map), map)] += 8; li[Win(Win(ncr[0], ncr[2], map), Win(ncr[1], ncr[3], map), map)] += 8; li[Win(Win(ncr[0], ncr[3], map), Win(ncr[1], ncr[2], map), map)] += 8; dic[(1 << ncr[0]) | (1 << ncr[1]) | (1 << ncr[2]) | (1 << ncr[3])] = li; } var count = 0; foreach (var ncr in NCRList(16, 8)) { var list = new bool[16]; var a = new List(8); var b = new List(8); foreach (var ni in ncr) { a.Add(ni); list[ni] = true; } for (var i = 0; i < 16; ++i) if (!list[i]) b.Add(i); var wa = new long[16]; foreach (var ncr2 in NCRList(8, 4)) { var list2 = new bool[8]; var c = new List(4); var d = new List(4); foreach (var ni in ncr2) { c.Add(a[ni]); list2[ni] = true; } for (var i = 0; i < 8; ++i) if (!list2[i]) d.Add(a[i]); var lc = dic[(1 << c[0]) | (1 << c[1]) | (1 << c[2]) | (1 << c[3])]; var ld = dic[(1 << d[0]) | (1 << d[1]) | (1 << d[2]) | (1 << d[3])]; foreach (var ci in c) foreach (var di in d) { var wi = Win(ci, di, map); wa[wi] += lc[ci] * ld[di]; } ++count; } var wb = new long[16]; foreach (var ncr2 in NCRList(8, 4)) { var list2 = new bool[8]; var c = new List(4); var d = new List(4); foreach (var ni in ncr2) { c.Add(b[ni]); list2[ni] = true; } for (var i = 0; i < 8; ++i) if (!list2[i]) d.Add(b[i]); var lc = dic[(1 << c[0]) | (1 << c[1]) | (1 << c[2]) | (1 << c[3])]; var ld = dic[(1 << d[0]) | (1 << d[1]) | (1 << d[2]) | (1 << d[3])]; foreach (var ci in c) foreach (var di in d) { var wi = Win(ci, di, map); wb[wi] += lc[ci] * ld[di]; } } foreach (var ai in a) foreach (var bi in b) { ans[Win(ai, bi, map)] += wa[ai] * wb[bi]; } } WriteLine(string.Join("\n", ans)); } static int Win(int a, int b, int[][] map) { if (a > b) (a, b) = (b, a); return map[a][b] == 1 ? a : b; } static IEnumerable NCRList(int n, int r) { var ans = new int[r]; for (var i = 0; i < ans.Length; ++i) ans[i] = i; ans[ans.Length - 1] = ans.Length - 2; var pos = r - 1; while (pos >= 0) { ++ans[pos]; while (pos < r - 1) { ++pos; ans[pos] = ans[pos - 1] + 1; } if (pos == r - 1) { yield return ans; } while (pos >= 0 && ans[pos] == n + pos - r) { --pos; } } } }