uses crt;

const
  size = 16;
type
  mx = array[1 .. size, 1 .. size] of real;

procedure read_matrix(var f: text; var m: mx;
          var rows, cols: integer);
var i, j: integer;
begin
  i := 0;
  repeat
    inc(i); j := 0;
    while not seekeoln(f) do begin
      inc(j);
      read(f, m[i, j]);
    end;
    readln(f)

  until seekeoln(f);
  rows := i; cols := j;
end;

procedure delete_zeroes(var m: mx; var rows, cols: integer);
const eps = 0.0001;
var
  i, j, k
  : integer;
  zero: boolean;
begin
  { checking rows first }
  i := 1;
  while i <= rows do begin
    zero := true;
    for j := 1 to cols do
      if abs(m[i, j]) > eps then zero := false;
    if zero then begin
      if i <> rows then
        for j := 1 to cols do
          for k := i to rows - 1 do m[k, j] := m[k + 1, j];
      dec(rows);
    end
    else inc(i);
  end;

  { now checking cols }
  j := 1;
  while j <= cols do begin
    zero := true;
    for i := 1 to rows do
      if abs(m[i, j]) > eps then zero := false;
    if zero then begin
      if j <> cols then
        for i := 1 to rows do
          for k := j to cols - 1 do m[i, k] := m[i, k + 1];
      dec(cols);
    end
    else inc(j);
  end;
end;

procedure mult_matrix(var res: mx; const a, b: mx;
          row_a, common, col_b: integer);
var i, j, k: integer;
begin
  for i := 1 to row_a do
    for j := 1 to col_b do begin
      res[i, j] := 0;
      for k := 1 to common do
        res[i, j] := res[i, j] + a[i, k] * b[k, j];
    end;
end;

procedure print_matrix(const m: mx; rows, cols: integer);
var i, j: integer;
begin
  for i := 1 to rows do begin
    for j := 1 to cols do write(m[i, j]:7:2);
    writeln;
  end;
end;

var
  A, B, res: mx;
  f: text;
  rows_a, cols_a: integer;
  rows_b, cols_b: integer;

begin
  clrscr;
  assign(f, 'mx.txt');
  reset(f);
  writeln('A:');
  read_matrix(f, A, rows_a, cols_a);
  delete_zeroes(A, rows_a, cols_a);
  print_matrix(A, rows_a, cols_a);

  writeln('B:');
  read_matrix(f, B, rows_b, cols_b);
  delete_zeroes(B, rows_b, cols_b);
  print_matrix(B, rows_b, cols_b);

  if rows_a = cols_b then begin
    mult_matrix(res, b, a, rows_b, rows_a, cols_a);
    writeln('result:');
    print_matrix(res, rows_b, cols_a);
  end
  else
    if cols_a = rows_b then begin
      mult_matrix(res, a, b, rows_a, rows_b, cols_b);
      writeln('result:');
      print_matrix(res, rows_a, cols_b);
    end
    else writeln('multiplication impossible');


  close(f);
end.