source_code: import java.io.*;
  import java.util.*;
  public class E16 {
  	static double[][] grid;
  	public static void main(String[] args) throws IOException	{
  		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
  		int n = Integer.parseInt(br.readLine());
  		grid = new double[n][n];
  		for(int i = 0; i < n; i++)	{
  			StringTokenizer st = new StringTokenizer(br.readLine());
  			for(int j = 0; j < n; j++)	{
  				grid[i][j] = Double.parseDouble(st.nextToken());
  			}
  		}
  		boolean[] seen = new boolean[1<<n];
  		double[] prob = new double[1<<n];
  		prob[(1<<n)-1] = 1;
  		LinkedList<Integer> q = new LinkedList<Integer>();
  		q.add((1<<n)-1);
  		while(!q.isEmpty())	{
  			int curr = q.removeFirst();
  			if(Integer.bitCount(curr) == 1)
  				continue;
  			for(int i = 0; i < n; i++)	{
  				if((curr & (1 << i)) == 0)
  					continue;
  				for(int j = i+1; j < n; j++)		{
  					if((curr & (1<<j)) == 0)
  						continue;
  					prob[curr-(1<<i)] += prob[curr] * grid[j][i];
  					prob[curr-(1<<j)] += prob[curr] * grid[i][j];
  					if(!seen[curr-(1<<i)])	{
  						q.addLast(curr-(1<<i));
  						seen[curr-(1<<i)] = true;
  					}
  					if(!seen[curr-(1<<j)])	{
  						q.addLast(curr-(1<<j));
  						seen[curr-(1<<j)] = true;
  					}
  				}
  			}
  			prob[curr] = 0;
  		}
  		double sum = 0;
  		for(int i = 0; i < n; i++)		{
  			sum += prob[1<<i];
  		}
  		for(int i = 0; i < n-1; i++)	{
  			System.out.print(prob[1<<i]/sum + " ");
  		}
  		System.out.println(prob[1<<(n-1)]/sum);
  	}
  }
  