#include <bits/stdc++.h>
using namespace std;
int f[1 << 14][14][1 << 6], bit[1 << 14], rev[1 << 14];
bool e[15][15];
long long ans[1 << 14];
int main() {
  int n = 14;
  scanf("%d", &n);
  for (int i = 0; i < n; i++) {
    char str[20];
    scanf("%s", str);
    for (int j = 0; j < n; j++) e[i][j] = str[j] - '0';
  }
  int m = ((n + 1) >> 1);
  for (int i = 1; i < (1 << n); i++) {
    bit[i] = bit[i >> 1] + (i & 1);
    if (bit[i] <= n - m - 1) {
      for (int j = 0; j < n - m - 1; j++)
        if ((i >> j) & 1) rev[i] ^= (1 << (n - m - 2 - j));
    }
  }
  for (int i = 0; i < n; i++) f[1 << i][i][0] = 1;
  for (int i = 1; i < (1 << n); i++)
    if (bit[i] < m) {
      int t = bit[i] - 1;
      for (int j = 0; j < n; j++)
        if ((i >> j) & 1) {
          for (int k = 0; k < n; k++)
            if (!((i >> k) & 1)) {
              int nc = (i ^ (1 << k));
              if (e[j][k]) {
                int nn = (1 << t);
                for (int l = 0; l < (1 << t); l++)
                  if (f[i][j][l]) f[nc][k][l ^ nn] += f[i][j][l];
              } else {
                for (int l = 0; l < (1 << t); l++)
                  if (f[i][j][l]) f[nc][k][l] += f[i][j][l];
              }
            }
        }
    }
  for (int i = 1; i < (1 << n); i++)
    if (bit[i] == m) {
      int u = m - 1, v = n - m - 1, r = ((1 << n) - 1) ^ i;
      for (int j = 0; j < n; j++)
        if ((i >> j) & 1) {
          for (int k = 0; k < n; k++)
            if (!((i >> k) & 1)) {
              int cs = ((e[j][k]) ? (1 << (m - 1)) : 0);
              for (int t1 = 0; t1 < (1 << u); t1++)
                if (f[i][j][t1]) {
                  for (int t2 = 0; t2 < (1 << v); t2++)
                    if (f[r][k][t2])
                      ans[t1 ^ (rev[t2] << m) ^ cs] +=
                          (long long)f[i][j][t1] * f[r][k][t2];
                }
            }
        }
    }
  for (int i = 0; i < (1 << (n - 1)); i++) printf("%lld ", ans[i]);
  printf("\n");
  return 0;
}
