#include <bits/stdc++.h>
using namespace std;
template <typename T>
ostream &operator<<(ostream &stream, vector<T> &v) {
  for (T &x : v) stream << x << " ";
  return stream;
}
template <typename T>
istream &operator>>(istream &stream, vector<T> &v) {
  for (T &x : v) stream >> x;
  return stream;
}
bool sortcol(vector<long long> &a, vector<long long> &b) { return a[1] < b[1]; }
long long n;
double matrix[19][19];
double dp[(1 << 19) - 1];
vector<bool> visited(1 << 19 - 1, 0);
double helper(int mask, int n) {
  if (mask == (1 << n) - 1) {
    dp[mask] = 1.0;
    visited[mask] = 1;
    return dp[mask];
  }
  if (visited[mask]) {
    return dp[mask];
  }
  dp[mask] = 0.0;
  int count = __builtin_popcount(mask);
  for (int i = 0; i < n; i++) {
    double ans = 0;
    if ((mask & (1 << i))) {
      for (int j = 0; j < n; j++) {
        if (!(mask & (1 << j))) {
          ans += helper((mask ^ (1 << j)), n) * matrix[i][j];
        }
      }
      if (count > 0) {
        dp[mask] += ans / (((count + 1) * (count)) / 2);
      }
    }
  }
  visited[mask] = 1;
  return dp[mask];
}
void solve() {
  cin >> n;
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < n; j++) {
      cin >> matrix[i][j];
    }
  }
  dp[(1 << n) - 1] = 1;
  int kp = (n * (n - 1)) / 2;
  for (int i = 0; i < n; i++) {
    cout << helper((1 << i), n) << " ";
  }
}
int main() {
  int t = 1;
  while (t-- > 0) {
    solve();
  }
  return 0ll;
}
