use std::array; use proconio::{fastout, input}; const M: usize = 1000000007; #[fastout] fn main() { input! { a: usize, b: usize, n: usize, } let mat = [[0, 1], [b, a]]; let mut doubling = mat; let mut acc = [[1, 0], [0, 1]]; for i in 0..64 - n.leading_zeros() { if n >> i & 1 == 1 { acc = mat_mul(&acc, &doubling); } doubling = mat_mul(&doubling, &doubling); } println!("{}", acc[0][1]); } fn mat_mul(l: &[[usize; 2]; 2], r: &[[usize; 2]; 2]) -> [[usize; 2]; 2] { array::from_fn(|i| array::from_fn(|j| (l[i][0] * r[0][j] % M + l[i][1] * r[1][j] % M) % M)) }