#include <bits/stdc++.h>
using namespace std;
const long long N = 14;
bool is[N][N];
long long go[(1LL << N)];
long long pw[N];
long long id = 0;
long long dp[14][10000][64];
long long ways[(1LL << N)];
long long revv[(1LL << N)];
long long vv;
long long get(long long i) {
  long long res = 0;
  for (long long j = 0; j < vv - 1; j++)
    if ((i & (1LL << j))) res += pw[vv - j - 2];
  return res;
}
void solve() {
  pw[0] = 1;
  for (long long i = 0; i < N - 1; i++) pw[i + 1] = (pw[i] << 1);
  long long n;
  cin >> n;
  long long md = (n / 2);
  vv = n - md;
  long long full = (1LL << n) - 1;
  for (long long i = 0; i < (1LL << n); i++) revv[i] = get(i);
  string s;
  for (long long i = 1; i < (1LL << n); i++)
    if (__builtin_popcount(i) <= 7) {
      go[i] = (id++);
    }
  for (long long i = 0; i < n; i++) {
    cin >> s;
    for (long long j = 0; j < n; j++)
      if (s[j] == '1') is[i][j] = 1;
  }
  for (long long i = 0; i < n; i++)
    for (long long j = 0; j < n; j++)
      if (i != j) dp[j][go[pw[i] | pw[j]]][is[i][j]]++;
  if (n == 2) {
    for (long long i = 0; i < n; i++)
      for (long long j = 0; j < n; j++)
        if (i != j) ways[is[i][j]]++;
    cout << ways[0] << " " << ways[1] << '\n';
    return;
  }
  for (long long i = 1; i < (1LL << n); i++) {
    long long set = (__builtin_popcount(i));
    if (set <= 7 && set >= 3) {
      for (long long j = 0; j < n; j++) {
        if ((i & pw[j]) == 0) continue;
        for (long long k = 0; k < n; k++) {
          if ((i & pw[k]) == 0) continue;
          for (long long l = 0; l < (1LL << (set - 2)); l++) {
            dp[j][go[i]][(l << 1) | is[j][k]] += dp[k][go[(i ^ pw[j])]][l];
          }
        }
      }
    }
  }
  if (n <= 7) {
    for (long long k = 0; k < pw[n - 1]; k++) {
      long long temp = 0;
      for (long long i = 0; i < n; i++) temp += dp[i][go[full]][k];
      cout << temp << " ";
    }
    return;
  }
  for (long long i = 0; i < (1LL << n); i++) {
    long long set = __builtin_popcount(i);
    if (set != md) continue;
    long long a1 = i;
    long long a2 = (full ^ a1);
    for (long long j = 0; j < n; j++)
      if ((a1 & pw[j]))
        for (long long k = 0; k < n; k++)
          if ((a2 & pw[k]))
            for (long long l = 0; l < 64; l++)
              for (long long m = 0; m < 64; m++) {
                long long make =
                    (l << (n - md)) | revv[m] | (pw[n - md - 1] * is[j][k]);
                ways[make] += dp[j][go[a1]][l] * dp[k][go[a2]][m];
              }
  }
  for (long long i = 0; i < pw[n - 1]; i++) cout << ways[i] << " ";
}
signed main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  solve();
}
