struct anss{
double s[N];
string st;
};
anss gauss_jordan(int n,double eps,double a[N][N]){
anss ans;
ans.st="Yes";
bool vis[N];
double tmpmax;
int maxr;
for(int i=1;i<=n;i++){
tmpmax=0;
maxr=i;
for(int j=1;j<=n;j++){
if(!vis[j]&&fabs(a[j][i])>tmpmax){
tmpmax=fabs(a[j][i]);
maxr=j;
}
}
if(tmpmax<=eps) continue;
if(maxr!=i) swap(a[i],a[maxr]);
vis[i]=true;
for(int j=1;j<=n;j++){
if(i!=j){
double t=a[j][i]/a[i][i];
for(int k=1;k<=n+1;k++) a[j][k]-=t*a[i][k];
}
}
}
bool f=false;
for(int i=1;i<=n;i++){
if(fabs(a[i][i])<=eps){
f=true;
if(fabs(a[i][n+1])>eps){
ans.st="No Solution";
return ans;
}
}
}
if(f){
ans.st="Many Solutions";
return ans;
}
for(int i=1;i<=n;i++){
double sol=a[i][n+1]/a[i][i];
if(fabs(sol)<=eps){
ans.s[i]=0;
continue;
}
ans.s[i]=sol;
}
return ans;
}