#include<cmath> #include<cstdio> #include<cstring> #include<cstdlib> #include<utility> #include<iostream> #include<algorithm> using namespace std; class equation { private: double a[200][200]; int i,j,k,r,c; double t; bool f; public: int e,v; double x[200]; equation() { memset(a,0,sizeof(a)); memset(x,0,sizeof(x)); } void input() { scanf("%d %d\n",&e,&v); for (i=1;i<=e;i++) { for (j=1;j<=v+1;j++) scanf("%lf",&a[i][j]); scanf("\n"); } } bool zero(double x){ return fabs(x)<=1e-8?1:0; } int solve() { for (r=1,c=1;r<=e && c<=v;r++,c++) { for (k=r,i=r+1;i<=e;i++) if (fabs(a[i][c])>fabs(a[k][c])) k=i; if (k!=r) for (i=1;i<=v+1;i++) swap(a[k][i],a[r][i]); if (zero(a[r][c])) { r--; continue; } for (i=r+1;i<=e;i++) if (!zero(a[i][c])) { t=a[i][c]/a[r][c]; for(j=1;j<=v+1;j++) a[i][j]-=a[r][j]*t; } } for (i=1;i<=e;i++) { for (f=1,j=1;j<=v;j++) if (!zero(a[i][j])) f=0; if (f && !zero(a[i][v+1])) return -1; } if (r<=v) return v-r+1; for (i=v;i>=1;i--) { for (t=a[i][v+1],j=i+1;j<=v;j++) t-=a[i][j]*x[j]; x[i]=t/a[i][i]; } return 0; } void output() { for (i=1;i<=v;i++) printf("%.4lf ",x[i]); printf("\n"); } }; equation p; int main() { freopen("guass.in","r",stdin); freopen("guass.out","w",stdout); p.input(); printf("%d\n",p.solve()); p.output(); }