#include <bits/stdc++.h>
using namespace std;
const int MAXN = 305;
const double EPS = 1e-10;
int N, M;
double A[MAXN][MAXN]; // matrice extinsă N x (M+1)
int main() {
ifstream fin("gauss.in");
ofstream fout("gauss.out");
fin >> N >> M;
for (int i = 0; i < N; i++)
for (int j = 0; j <= M; j++)
fin >> A[i][j];
int i = 0, j = 0;
vector<int> pivot_pos(M, -1); // -1 pentru variabile libere
while (i < N && j < M) {
// caut pivot
int row = i;
for (int k = i; k < N; k++)
if (fabs(A[k][j]) > fabs(A[row][j]))
row = k;
if (fabs(A[row][j]) < EPS) {
// coloana j → variabilă liberă
j++;
continue;
}
// swap rânduri
for (int col = 0; col <= M; col++)
swap(A[i][col], A[row][col]);
pivot_pos[j] = i;
// normalizare pivot
double pivot = A[i][j];
for (int col = j; col <= M; col++)
A[i][col] /= pivot;
// eliminare sub pivot
for (int u = 0; u < N; u++) {
if (u == i) continue;
double factor = A[u][j];
for (int col = j; col <= M; col++)
A[u][col] -= factor * A[i][col];
}
i++;
j++;
}
// verificare imposibil
for (int row = 0; row < N; row++) {
bool all_zero = true;
for (int col = 0; col < M; col++)
if (fabs(A[row][col]) > EPS) {
all_zero = false;
break;
}
if (all_zero && fabs(A[row][M]) > EPS) {
fout << "Imposibil\n";
return 0;
}
}
// calcul solutii
vector<double> x(M, 0.0);
for (int col = 0; col < M; col++) {
int row = pivot_pos[col];
if (row == -1) continue; // variabila libera → 0
x[col] = A[row][M];
}
fout << fixed << setprecision(8);
for (int k = 0; k < M; k++)
fout << x[k] << " ";
fout << "\n";
return 0;
}