import java.util.*; public class SystemOfEquations { // x0 = 2 // x1 = 3 // x2 = 5 // x3 = -2 // // 4 5 // 1 2 3 4 15 // 8 7 2 -1 49 // 4 -2 -3 0 -13 // 0 4 3 2 23 Scanner in = new Scanner(System.in); private void showSystem() { int n = in.nextInt(); int m = in.nextInt(); double[][] a = new double[n][m]; for (int i = 0; i < n; ++i) { for (int j = 0; j < m; ++j) { a[i][j] = in.nextDouble(); } } double[][] x = solve(a); out(x); } // 3 // 1 2 14 // 4 8 -5 // 3 8 0 private void showInverse() { int n = in.nextInt(); double[][] a = new double[n][n]; for (int i = 0; i < n; ++i) { for (int j = 0; j < n; ++j) { a[i][j] = in.nextDouble(); } } double[][] m = new double[n][2 * n]; for (int i = 0; i < n; ++i) { for (int j = 0; j < n; ++j) { m[i][j] = a[i][j]; } m[i][i + n] = 1.0; } double[][] x = trans(solve(m)); out(x); x = multiply(a, x); System.out.println(); out(x); } private double[][] multiply(double[][] a, double[][] b) { double[][] c = new double[a.length][b[0].length]; for (int i = 0; i < c.length; ++i) { for (int j = 0; j < c[i].length; ++j) { for (int k = 0; k < a[i].length; ++k) { c[i][j] += a[i][k] * b[k][j]; } } } return c; } private void out(double[][] x) { if (x.length == 0) { return; } for (int i = 0; i < x.length; ++i) { for (int j = 0; j < x[i].length; ++j) { if (j != 0) { System.out.print(' '); } System.out.print(x[i][j]); } System.out.println(); } } private double[][] solve(double[][] a) { int n = a.length; int m = a[0].length; for (int j = 0; j < n; ++j) { int best = j; for (int i = j + 1; i < n; ++i) { if (Math.abs(a[i][j]) > Math.abs(a[best][j])) { best = i; } } if (Math.abs(a[best][j]) < 1e-9) { System.out.println("Determinant is zero!"); return new double[0][0]; } double[] td = a[j]; a[j] = a[best]; a[best] = td; for (int i = j + 1; i < n; ++i) { double koef = a[i][j] / a[j][j]; for (int k = j; k < m; ++k) { a[i][k] -= koef * a[j][k]; } } } double[][] res = new double[m - n][n]; for (int j = n - 1; j >= 0; --j) { for (int k = n; k < m; ++k) { double koef = a[j][k] / a[j][j]; res[k - n][j] = koef; for (int i = j - 1; i >= 0; --i) { a[i][k] -= a[i][j] * koef; } } } return res; } private double[][] trans(double[][] a) { double[][] res = new double[a[0].length][a.length]; for (int i = 0; i < res.length; ++i) { for (int j = 0; j < res[i].length; ++j) { res[i][j] = a[j][i]; } } return res; } public static void main(String[] args) { new SystemOfEquations().showSystem(); // new SystemOfEquations().showInverse(); } }