program yukicoder_2441 use, intrinsic :: iso_fortran_env implicit none integer(int32), parameter :: n = 2 integer(int32) :: m(n, n) read(input_unit, *) m(1, :), m(2, :) m(:, :) = pow_mat(n, m, 3) write(output_unit, '(*(i0, 1x))') m(1, :) write(output_unit, '(*(i0, 1x))') m(2, :) contains pure recursive function pow_mat(n, mat, p) result(res) integer(int32), intent(in) :: n, mat(n, n) integer(int32), intent(in) :: p integer(int32) :: res(n, n) integer(int32) :: i, j, k if (p == 0) then res(:, :) = 0 do i = 1, n res(i, i) = 1 end do return end if !> p /= 0 if (iand(p, b'1') == 0) then res(:, :) = pow_mat(n, matmul(mat, mat), p / 2) else res(:, :) = matmul(mat, pow_mat(n, mat, p - 1)) end if end function pow_mat end program yukicoder_2441