#include <bits/stdc++.h>
using namespace std;
template <class T, class U>
void ckmin(T &a, U b) {
  if (a > b) a = b;
}
template <class T, class U>
void ckmax(T &a, U b) {
  if (a < b) a = b;
}
const int MAXN = 14;
int N;
int mask[MAXN + 2];
int dp[(1 << MAXN)][(1 << 8)][14];
int ind[(1 << MAXN)][(1 << 8)];
int ways[MAXN][(1 << MAXN)];
int rev[(1 << 6)];
long long ans[(1 << MAXN)];
int32_t main() {
  cout << fixed << setprecision(12);
  cerr << fixed << setprecision(4);
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cin >> N;
  for (auto i = (0); i < (N); i++) {
    string temps;
    cin >> temps;
    for (auto j = (0); j < (N); j++) {
      if (temps[j] == '1') {
        mask[i] += (1 << j);
      }
    }
  }
  for (auto i = (0); i < (N); i++) {
    dp[(1 << i)][0][i] = 1;
  }
  int a = min(9, N - 1);
  for (auto i = (1); i < ((1 << N)); i++) {
    for (auto j = (0); j < ((1 << 7)); j++) {
      for (auto k = (0); k < (N); k++) {
        if (dp[i][j][k] == 0) continue;
        for (auto m = (0); m < (N); m++) {
          if (i & (1 << m)) continue;
          dp[i + (1 << m)][(j << 1) + !!(mask[k] & (1 << m))][m] += dp[i][j][k];
        }
      }
    }
  }
  for (auto i = (0); i < ((1 << (N - a - 1))); i++) {
    for (auto j = (0); j < (N - a - 1); j++) {
      if (i & (1 << j)) {
        rev[i] += (1 << (N - a - 2 - j));
      }
    }
  }
  for (auto i = (0); i < ((1 << N)); i++) {
    int inv = (1 << N) - 1 - i;
    if (__builtin_popcount(i) != a) continue;
    for (auto j = (0); j < ((1 << (a - 1))); j++) {
      for (auto k = (0); k < (N); k++) {
        if (dp[i][j][k] == 0) continue;
        for (auto m = (0); m < ((1 << (N - a - 1))); m++) {
          int cand = ind[inv][m];
          int x[2];
          x[0] = (j << (N - a)) + rev[m];
          x[1] = x[0] + (1 << (N - a - 1));
          for (auto n = (0); n < (N); n++) {
            if (dp[inv][m][n] == 0) continue;
            ans[x[!!(mask[k] & (1 << n))]] +=
                (long long)dp[i][j][k] * dp[inv][m][n];
          }
        }
      }
    }
  }
  for (auto i = (0); i < ((1 << (N - 1))); i++) {
    cout << ans[i] << ' ';
  }
  cout << '\n';
  return 0;
}
