def f(a, b) [ [ a[0][0] * b[0][0] + a[0][1] * b[1][0], a[0][0] * b[0][1] + a[0][1] * b[1][1], ], [ a[1][0] * b[0][0] + a[1][1] * b[1][0], a[1][0] * b[0][1] + a[1][1] * b[1][1], ], ] end M = 2.times.map { gets.split.map(&:to_i) } ans = f(f(M, M), M) puts ans.map { |row| row.join(' ') }