#include #include #include #include #include #include using ll = int64_t; template T read(){ T t; std::cin>>t; return t; } constexpr ll maxn = 100; ll n; double im[maxn+5][maxn+5],tmp[maxn+5]; void cp(double*f,double*t){ for(ll i=1;i<=n+1;i++){ t[i]=f[i]; } } void sp(double*f,double*t){ for(ll i=1;i<=n+1;i++){ std::swap(f[i],t[i]); } } int main(){ std::cin>>n; for(ll i=1;i<=n;i++){ for(ll j=1;j<=n+1;j++){ std::cin>>im[i][j]; } } for(ll i=1;i<=n;i++){ for(ll k=i;k<=n;k++){ if(im[k][i]!=0){ if(k!=i){ sp(im[k],im[i]); } break; } } double fact = im[i][i]; for(ll j=1;j<=n+1;j++){ im[i][j]/=fact; } for(ll k=1;k<=n;k++){ if(k==i)continue; double fact = im[k][i]; for(ll j=1;j<=n+1;j++){ im[k][j]-=fact*im[i][j]; } } } if([]()->bool{ for(ll i=1;i<=n;i++){ bool isAllZero=true; for(ll j=1;j<=n;j++){ if(im[i][j]!=0){ isAllZero=false; } } if(isAllZero){ return false; } } for(ll i=1;i<=n;i++){ if(std::isnan(im[i][n+1])){ return false; } } return true; }()){ std::cout<