program main implicit none integer(16) :: n, mat(2, 2) = 0, m(2, 2) read *, n m(1, 1) = 0 m(2, 1) = 1 m(1, 2) = 3 m(2, 2) = 2 mat(1, 1) = 1 mat(2, 2) = 1 do while (n > 0) if (mod(n, 2) == 1) then mat = mod(matmul(mat, m), 10**9 + 7) end if m = mod(matmul(m, m), 10**9 + 7) n = n / 2 end do print *, mat(1, 1) end program main