#include <cmath>
#include <cstdint>
#include <iomanip>
#include <ios>
#include <iostream>
#include <utility>

using ll = int64_t;
template<class T>
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<<std::fixed<<std::setprecision(2);
        for(ll i=1;i<=n;i++){
            std::cout<<im[i][n+1]<<'\n';
        }
    }else{
        std::cout<<"No Solution\n";
    }
}