#include <bits/stdc++.h>
using namespace std;
const int N = 2e6 + 9;
const long long mod = 998244353;
int ppc[1 << 14];
vector<long long> dp[14][1 << 14];
char s[14][20], Log2[1 << 14];
long long ans[1 << 14], num[1 << 14];
bool vis[14][1 << 14];
int main() {
  ppc[0] = -1;
  for (int i = (1); i < (1 << 14); ++i) ppc[i] = ppc[i >> 1] + (i & 1);
  for (int i = (0); i < (14); ++i) Log2[1 << i] = i;
  int n;
  scanf("%d", &n);
  int op = (1 << n) - 1;
  for (int i = (0); i < (n); ++i) scanf("%s", s + i);
  for (int i = (0); i < (n); ++i)
    for (int j = (0); j < (n); ++j) s[i][j] -= 48;
  for (int i = (0); i < (n); ++i) dp[i][1 << i].push_back(1);
  for (int mask = (1); mask < (op); ++mask) {
    int L = mask, R = op ^ mask;
    for (int i = L; i; i ^= ((i) & (-i))) {
      int l = Log2[((i) & (-i))];
      for (int k = (0); k < (1 << ppc[mask]); ++k) num[k] = dp[l][mask][k];
      dp[l][mask].clear();
      for (int j = R; j; j ^= ((j) & (-j))) {
        int r = Log2[((j) & (-j))];
        if (!vis[r][mask | ((j) & (-j))]) {
          vis[r][mask | (((j) & (-j)))] = 1;
          for (int k = (0); k < (1 << ppc[mask] + 1); ++k)
            dp[r][mask | ((j) & (-j))].push_back(0);
        }
        if (s[l][r]) {
          int x = 1 << ppc[mask];
          for (int k = (0); k < (1 << ppc[mask]); ++k) {
            if (num[k]) dp[r][mask | ((j) & (-j))][k | x] += num[k];
          }
        } else {
          for (int k = (0); k < (1 << ppc[mask]); ++k) {
            if (num[k]) dp[r][mask | ((j) & (-j))][k] += num[k];
          }
        }
      }
    }
  }
  for (int i = (0); i < (n); ++i) {
    for (int j = (0); j < (1 << (n - 1)); ++j) ans[j] += dp[i][op][j];
  }
  for (int i = (0); i < (1 << (n - 1)); ++i) printf("%lld ", ans[i]);
}
