#include <bits/stdc++.h>
using namespace std;
const int MAX_N = 100011;
const long long INF = (1 << 29) + 123;
const long long MOD = 1000000007;
const long double PI = 4 * atan((long double)1);
template <typename T>
bool ckmin(T& a, const T& b) {
  return a > b ? a = b, 1 : 0;
}
template <typename T>
bool ckmax(T& a, const T& b) {
  return b > a ? a = b, 1 : 0;
}
const int MX = 14;
const int eMX = 1 << MX;
int len[eMX];
vector<long long> dp[eMX][MX];
char m[MX][MX];
int n;
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  cin >> n;
  for (int i = 0; i < n; i++)
    for (int j = 0; j < n; j++) cin >> m[i][j];
  vector<pair<int, int> > order;
  for (int i = 0; i < 1 << n; i++) {
    int c = 0, mark = -1;
    for (int j = 0; j < n; j++) {
      if (i & (1 << j)) {
        c++;
        mark = j;
      }
    }
    len[i] = c;
    for (int j = 0; j < n; j++)
      for (int k = 0; k < 1 << (len[i] - 1); k++) dp[i][j].push_back(0);
    if (len[i] == 1)
      for (int j = 0; j < n; j++) dp[i][mark][0] = 1;
    order.push_back(make_pair(c, i));
  }
  sort(order.begin(), order.end());
  for (auto& a : order) {
    if (a.first == 0) continue;
    for (int j = 0; j < n; j++) {
      for (int k = 0; k < 1 << (a.first - 1); k++) {
        for (int l = 0; l < n; l++) {
          if (!(a.second & (1 << l)))
            dp[a.second | (1 << l)][l][(k << 1) + (m[j][l] - '0')] +=
                dp[a.second][j][k];
        }
      }
    }
  }
  for (int i = 0; i < 1 << (n - 1); i++) {
    long long ans = 0;
    for (int j = 0; j < n; j++) ans += dp[(1 << n) - 1][j][i];
    cout << ans << " ";
  }
  cout << endl;
  return 0;
}
