#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
double a[110][110];
int n;
const double esp=1e-6;
int gauss()
{
int c,r;
for(r=0,c=0;c<n;c++) // 循环每一列
{
int t=r;
for(int i=r+1;i<n;i++) // 寻找绝对值最大的那一行
if(fabs(a[i][c])>fabs(a[t][c]))
t=i;
if(fabs(a[t][c])<esp) continue;
for(int i=c;i<=n;i++) swap(a[r][i],a[t][i]); //两行交换
for(int i=n;i>=c;i--) a[r][i]/=a[r][c]; //1
for(int i=r+1;i<n;i++)
{
if(fabs(a[i][c])<esp) continue;
for(int j=n;j>=c;j--) //倒叙 不然a[i][c]会变成0
a[i][j]-=a[r][j]*a[i][c]; // 进行运算
}
r+=1;
}
if(r<n)
{
for(int i=r;i<n;i++) if(a[i][n]>esp) return 2;//无解
return 1;//无穷解
}
//解出唯一解
for(int i=n-1;i>=0;i--)
{
for(int j=i+1;j<n;j++) a[i][n]-=a[j][n]*a[i][j];
}
return 0;
}
int main()
{
cin>>n;
for(int i=0;i<n;i++)
{
for(int j=0;j<=n;j++)
cin>>a[i][j];
}
int t=gauss();
if(t==0)
{
for(int i=0;i<n;i++)
{
if(fabs(a[i][n])<esp) a[i][n]=0;
printf("%.2lf\n",a[i][n]);
}
}
else if(t==1) cout<<"Infinite group solutions"<<endl;
else cout<<"No solution"<<endl;
return 0;
}
10-12
4148