#include <bits/stdc++.h>
using namespace std;
FILE *fin = fopen("gauss.in", "r");
FILE *fout = fopen("gauss.out", "w");
const int maxn = 300;
const double eps = 1e-8;
int n, m;
double a[maxn + 1][maxn + 1];
double x[maxn + 1];
inline bool zero(double x) {
return fabs(x) < eps;
}
int main() {
fscanf(fin, "%d%d", &n, &m);
for(int i = 1;i <= n;i++)
for(int j = 1;j <= m + 1;j++)
fscanf(fin, "%lf", &a[i][j]);
int i = 1, j = 1;
while(i <= n && j <= m) {
int k = i;
while(k <= n && zero(a[i][j]) == 1)
k++;
if(k == n + 1) {
j++;
continue;
}
if(k != i) {
for(int aa = 1;aa <= m + 1;aa++) {
swap(a[i][aa], a[k][aa]);
}
}
for(int aa = j + 1;aa <= m + 1;aa++)//incep de la j + 1 deoarece celelalte sunt 0 => nu le mai impart la a[i][j] pentru a usura calculele
a[i][aa] /= a[i][j];
a[i][j] = 1.0;
for(int aa = i + 1;aa <= n;aa++) {
for(int bb = j + 1;bb <= m + 1;bb++)
a[aa][bb] -= a[aa][j] * a[i][bb];
a[aa][j] = 0.0;
}
i++, j++;
}
for(int i = n;i > 0;i--) {
for(int j = 1;j <= m + 1;j++) {
if(!zero(a[i][j])) {
if(j == m + 1) {
fputs("Imposibil", fout);
return 0;
}
x[j] = a[i][m + 1];
for(int aa = j + 1;aa <= m;aa++) {
x[j] -= x[aa] * a[i][aa];
}
break;
}
}
}
for(int i = 1;i <= m;i++)
fprintf(fout, "%lf ", x[i]);
fclose(fin);
fclose(fout);
return 0;
}