#1607. Đếm dãy số (SEQCONST)

Bộ nhớ: 512 MiB Thời gian: 1000 ms Nhập/xuất từ luồng chuẩn
Kiểu bài: Thông thường Kiểu chấm: So sánh văn bản
Đưa lên bởi: Trùm CUỐI

Đề bài

Cho một tập hợp các giá trị S = \{1, 2, 3, 4\} .

Nhiệm vụ của bạn là đếm số lượng dãy số nguyên A = (a_0, a_1, \dots, a_n) bao gồm n+1 phần tử thỏa mãn tất cả các điều kiện sau:

  1. Mọi phần tử của dãy số đều thuộc tập hợp S ( a_i \in S ).
  2. Phần tử đầu tiên và phần tử cuối cùng của dãy số đều có giá trị là 4 ( a_0 = 4 a_n = 4 ).
  3. Hai phần tử liền kề bất kỳ trong dãy phải có giá trị khác nhau ( a_i \neq a_{i+1} với mọi 0 \le i < n ).

Hãy tính số lượng dãy số thỏa mãn các điều kiện trên. Vì kết quả có thể rất lớn, hãy in ra phần dư của nó khi chia cho 1000000007 ( 10^9 + 7 ).

Dữ liệu:

  • Dòng đầu tiên chứa duy nhất số nguyên n ( 1 \le n \le 10^{18} ) — tham số xác định độ dài của dãy số (số lượng cặp phần tử liền kề).

Kết quả:

  • In ra duy nhất một số nguyên — số lượng dãy số thỏa mãn yêu cầu theo modulo 1000000007 ( 10^9 + 7 ).

Ví dụ:

Dữ liệu:

2

Kết quả:

3

Dữ liệu:

4

Kết quả:

21

Giải thích: Trong ví dụ đầu tiên với n=2 , dãy số có dạng (a_0, a_1, a_2) . Ta luôn có a_0 = 4, a_2 = 4 . Điều kiện a_i \neq a_{i+1} buộc a_1 phải khác 4. Các dãy số thỏa mãn là:

  • (4, 1, 4)
  • (4, 2, 4)
  • (4, 3, 4)

Tổng cộng có 3 dãy số.

Giới hạn:

  • Subtask #1 (20% số điểm): n \le 20 .

  • Subtask #2 (40% số điểm): n \le 10^6 .

  • Subtask #3 (40% số điểm): n \le 10^{18} .