#include <bits/stdc++.h>
using namespace std;
const double pi = acos(-1.0);
template <typename T, typename U>
inline void amin(T& x, U y) {
  if (y < x) x = y;
}
template <typename T, typename U>
inline void amax(T& x, U y) {
  if (x < y) x = y;
}
template <typename T>
inline void write(T x) {
  int i = 20;
  char buf[21];
  buf[20] = '\n';
  do {
    buf[--i] = x % 10 + '0';
    x /= 10;
  } while (x);
  do {
    putchar(buf[i]);
  } while (buf[i++] != '\n');
}
template <typename T>
inline T readInt() {
  T n = 0, s = 1;
  char p = getchar();
  if (p == '-') s = -1;
  while ((p < '0' || p > '9') && p != EOF && p != '-') p = getchar();
  if (p == '-') s = -1, p = getchar();
  while (p >= '0' && p <= '9') {
    n = (n << 3) + (n << 1) + (p - '0');
    p = getchar();
  }
  return n * s;
}
class Debugger {
 public:
  Debugger(const std::string& _separator = " - ")
      : first(true), separator(_separator) {}
  template <typename ObjectType>
  Debugger& operator,(const ObjectType& v) {
    if (!first)
    std:
      cerr << separator;
    std::cerr << v;
    first = false;
    return *this;
  }
  ~Debugger() {
  std:
    cerr << endl;
  }

 private:
  bool first;
  std::string separator;
};
vector<int> primes;
void sieve() {
  bool composite[100005];
  composite[0] = true;
  composite[1] = true;
  for (int i = 2; i * i < 100005; i++) {
    if (!composite[i]) {
      primes.push_back(i);
      for (int j = 2 * i; j < 100005; j += i) composite[j] = true;
    }
  }
}
void solve() {
  long long n;
  cin >> n;
  long double p[n][n];
  for (long long i = 0; i < n; i++) {
    for (long long j = 0; j < n; j++) {
      cin >> p[i][j];
    }
  }
  vector<long double> dp(1 << n, 0);
  dp[(1 << n) - 1] = 1.0;
  for (long long mask = (1 << n) - 1; mask >= 0; mask--) {
    for (long long i = 0; i < n; i++) {
      if (mask & (1 << i)) {
        long long x = __builtin_popcountll(mask);
        for (long long j = 0; j < n; j++) {
          if (j != i and mask & (1 << j)) {
            long long count = x * (x - 1) / 2;
            dp[mask ^ (1 << j)] += (dp[mask] * p[i][j]) / count;
          }
        }
      }
    }
  }
  for (long long i = 0; i < n; i++) {
    cout << dp[1 << i] << " ";
  }
  cout << "\n";
}
int main() {
  int t = 1;
  while (t--) {
    solve();
  }
  return 0;
}
