#include <bits/stdc++.h>
using namespace std;
const int mod = 1000000007;
const int N = 19;
int n;
double p[N][N], dp[1 << N];
template <class T>
struct vect {
  T* memory = new T[0];
  unsigned int length;
  unsigned int sz;
  inline vect() {
    length = 0;
    sz = 0;
  }
  inline vect(int n) {
    memory = new T[n];
    sz = n;
    length = 0;
  }
  inline ~vect() {}
  inline void incsize(const int len) {
    T* temp = new T[len];
    length = len;
    for (int i = 0; i < sz; ++i) temp[i] = memory[i];
    swap(temp, memory);
  }
  inline void resize(const unsigned int v) {
    sz = v;
    if (v > length) incsize((1 << v) + 1);
  }
  inline void push_back(const T a) {
    if (length == sz) incsize((length << 1) + 1);
    memory[sz++] = a;
  }
  inline T& operator[](const unsigned int i) { return memory[i]; }
  inline T* begin() { return memory; }
  inline T* end() { return memory + sz; }
  inline unsigned int size() { return sz; }
};
double go(int mask) {
  if (mask + 1 == (1 << n)) return 1;
  double& ans = dp[mask];
  if (ans >= 0) return ans;
  ans = 0;
  int P = 0;
  int j, i;
  for (i = 0; i < n; i++)
    if ((1 << i) & mask) P++;
  vect<int> a, b;
  for (j = 0; j < n; j++)
    if ((1 << j) & mask)
      b.push_back(j);
    else
      a.push_back(j);
  for (auto j : a) {
    if ((1 << j) & mask) continue;
    for (auto i : b)
      if ((1 << i) & mask)
        ans += (2 * p[i][j] / (P * (P + 1))) * go(mask ^ (1 << j));
  }
  return ans;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  int i, j;
  cin >> n;
  for (j = 0; j < (1 << n); j++) dp[j] = -10;
  for (i = 0; i < n; i++)
    for (j = 0; j < n; j++) cin >> p[i][j];
  for (i = 0; i < n; i++) cout << fixed << setprecision(6) << go(1 << i) << " ";
  return 0;
}
