#include<iostream>
#include<math.h>
using namespace std;
#define MAX 100
double A[MAX+1][MAX+1];
double B[MAX+1];
double X[MAX+1];
double e;
int n;
void OrderGaussianElimination()

{
int i,j,k;
double T;
//消元
for(k=1;k<=n-1;k++)
{
if( fabs(A[k][k])<=e )
{ printf("Error!\n"); return ;}
for(i=k+1;i<=n;i++)
{
T=A[i][k]/A[k][k];
B[i]-=T*B[k];
for(j=k;j<=n;j++)
A[i][j]-=T*A[k][j];
}
}
//回代
if( fabs(A[n][n])<=e )
{ printf("Error!\n"); return ;}
X[n]=B[n]/A[n][n];
double S_Aij_Xj;
for(i=n-1;i>=1;i--)
{
S_Aij_Xj=0;
for(j=i+1;j<=n;j++)
S_Aij_Xj+=A[i][j]*X[j];
X[i]=(B[i]-S_Aij_Xj)/A[i][i];
}
}
void print(double X[])

{
int i;
printf("X[]:\n");
for(i=1;i<=n;i++)
printf("%f\n",X[i]);
}
int main()

{
int i,j;
printf("n:");
scanf("%d",&n);
printf("A[][]:\n");
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
scanf("%lf",&A[i][j]);
printf("B[]:\n");
for(i=1;i<=n;i++)
scanf("%lf",&B[i]);
printf("e:");
scanf("%lf",&e);
OrderGaussianElimination();
print(X);
return 0;
}



