#include <bits/stdc++.h>
using namespace std;
const long long MOD = 1000000007LL;
const long long MAX = 600010LL;
template <class T>
T abs(T x) {
  return x > 0 ? x : -x;
}
template <typename T>
T gcd(T a, T b) {
  if (b == 0) return a;
  return gcd(b, a % b);
}
template <typename T>
T power(T x, T y, long long m = MOD) {
  T ans = 1;
  x %= m;
  while (y > 0) {
    if (y & 1LL) ans = (ans * x) % m;
    y >>= 1LL;
    x = (x * x) % m;
  }
  return ans % m;
}
double prob[MAX], eat[19][19];
string getbin(long long num) {
  string res = "";
  while (num) {
    res += ((num & 1) + '0');
    num = num >> 1;
  }
  reverse(res.begin(), res.end());
  return res;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  int n;
  cin >> n;
  for (int i(1); i <= (n); i++) {
    for (int j(1); j <= (n); j++) {
      cin >> eat[i][j];
    }
  }
  queue<int> q;
  int mask = 0;
  for (int i(1); i <= (n); i++) {
    mask = mask | (1 << i);
  }
  q.push(mask);
  memset(prob, 0, sizeof(prob));
  prob[mask] = 1.0;
  while (!q.empty()) {
    int x = q.front();
    q.pop();
    int k = __builtin_popcount(x);
    if (k != 1) {
      for (int i(1); i <= (n); i++) {
        if ((x >> i) & 1) {
          int newmask = x & (~(1 << i));
          if (prob[newmask] == 0) q.push(newmask);
          double mul = 2.0 / (k * (k - 1));
          double sum = 0;
          for (int j(1); j <= (n); j++) {
            if (j == i) continue;
            if ((x >> j) & 1) {
              sum += eat[j][i];
            }
          }
          prob[newmask] += prob[x] * mul * sum;
        }
      }
    }
  }
  for (int i(1); i <= (n); i++) {
    cout << fixed << setprecision(8) << prob[1 << i] << ' ';
  }
  return 0;
}
