Dãy Fibonacci (F_i) được đánh số từ 0 và được xác định bởi F0=0,F1=1. Với mọi i≥2, ta có Fi=Fi−1+Fi−2.
Cho chỉ số n, hãy tính Fn theo modulo 1000000007.
Input
Input gồm đúng một số nguyên n - chỉ số cần tính.
Output
In Fn theo modulo 1000000007.
Constraints
0≤n≤1018.
Scoring
Subtask 1 (50% số điểm): n≤2000.
Subtask 2 (50% số điểm): không có giới hạn bổ sung.
Example
Test 1
Input
10
Output
55
Giải thích: Từ F0=0,F1=1 và quy tắc cộng hai số liền trước, ta nhận được F10=55.
Lời giải tóm tắt
Phân tích: Trạng thái hai chiều [F_(i+1), F_i]^T được nhân với ma trận [[1,1],[1,0]] sau mỗi bước.
Thuật toán: Nâng ma trận chuyển lên lũy thừa n bằng bình phương liên tiếp; phần tử hàng 1 cột 2 là F_n.
Chứng minh tính đúng đắn: Mỗi phép nhân bảo toàn đúng truy hồi Fibonacci. Quy nạp theo số bước cho thấy lũy thừa thứ n đưa vector cơ sở tới [F_(n+1),F_n], nên phần tử được in là đáp án.