#1606. Biến Đổi Ký Tự (CHARTRANS)

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

Xét một hệ thống biến đổi chuỗi ký tự chỉ bao gồm hai loại ký tự là 'A' và 'B'. Ban đầu (tại bước 0), ta có một chuỗi S chỉ chứa duy nhất một ký tự 'A'.

Tại mỗi bước biến đổi tiếp theo, các ký tự trong chuỗi sẽ đồng loạt thay đổi theo quy tắc sau:

  1. Mỗi ký tự 'A' sẽ được thay thế bằng chuỗi con "AAAB".
  2. Mỗi ký tự 'B' sẽ được thay thế bằng chuỗi con "BBBA".

Ví dụ, sau 2 bước ra có:

  • Bước 0: "A"
  • Bước 1: "AAAB" (Ký tự 'A' ban đầu biến thành "AAAB")
  • Bước 2: "AAABAAABAAABBBBA" (3 ký tự 'A' đầu tiên mỗi ký tự biến thành "AAAB", ký tự 'B' cuối cùng biến thành "BBBA").

Hãy tính số lượng ký tự 'A' xuất hiện trong chuỗi sau n bước biến đổi.

Dữ liệu:

  • Dòng đầu tiên chứa một số nguyên n ( 0 \le n \le 10^{18} ) — số bước biến đổi.

Kết quả:

  • In ra một số nguyên duy nhất — phần dư của phép chia số lượng ký tự 'A' sau n bước cho 1000000007 ( 10^9 + 7 ).

Ví dụ:

Dữ liệu:

1

Kết quả:

3

Dữ liệu:

2

Kết quả:

10

Giới hạn:

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

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

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