#include <bits/stdc++.h>
using namespace std;
struct info
{
double eqn[100];
double res;
} matrix[100];
bool no_soln = false;
void forming_upper_trianguler_matrix(int dim)
{
for(int i = 1; i <= dim-1; i++)
{
for(int j = i + 1; j <= dim; j++)
{
double multiple = matrix[j].eqn[i] / matrix[i].eqn[i];
if(matrix[i].eqn[i] == 0)
{
no_soln = true;
break;
}
for(int k = 1; k <= dim; k++)
{
matrix[j].eqn[k] = matrix[j].eqn[k] - matrix[i].eqn[k] * multiple;
}
matrix[j].res = matrix[j].res - matrix[i].res*multiple;
}
}
}
void lower_trianguler_matrix(int dim)
{
for(int i = dim; i > 1 ; i--)
{
for(int j = i-1; j>= 1; j--)
{
double multiple = matrix[j].eqn[i] / matrix[i].eqn[i];
if(matrix[i].eqn[i] == 0)
{
no_soln = true;
break;
}
for(int k = dim; k >= 1; k--)
{
matrix[j].eqn[k] = matrix[j].eqn[k] - matrix[i].eqn[k] * multiple;
}
matrix[j].res = matrix[j].res - matrix[i].res * multiple;
}
}
}
int main(void)
{
int dim;
scanf("%d",&dim); //dimention of the matrix
for(int i = 1; i <= dim; i++) //dimention if n there will be n eqn and n variables per eqn
{
for(int j = 1; j <= dim; j++)
{
scanf("%lf",&matrix[i].eqn[j]);
}
scanf("%lf",&matrix[i].res);
}
forming_upper_trianguler_matrix(dim);
if(no_soln == true)
{
printf("There is no unique solution.\n");
}
else
{
lower_trianguler_matrix(dim);
if(no_soln == true)
{
printf("There is no unique solution.\n");
}
else
{
for(int i = 1; i <= dim; i++)
{
printf("solution of variable %d = %lf\n",i,matrix[i].res/matrix[i].eqn[i]);
}
}
}
return 0;
}