WARP - Lạc trong mê cung

Xem dạng PDF

Gửi bài giải

Điểm: 3,00 (OI)
Giới hạn thời gian: 1.0s
Giới hạn bộ nhớ: 256M

Tác giả:
Dạng bài
Ngôn ngữ cho phép
C, C#, C++, Go, Java, Pascal, Perl, PHP, Python, Ruby, Rust, Scratch, Swift

Tèo đang bị lạc trong mê cung và cần tìm đường thoát ra. Mê cung gồm n phòng đánh số từ 1 đến n. Mỗi phòng được mã hóa bằng một số tự nhiên từ 0 đến ~ 2^{30} ~ − 1.

Tèo đang ở phòng số 1. Trong phòng này có hướng dẫn rằng Tèo có thể di chuyển từ phòng a đến phòng b khi và chỉ khi:

  • a < b
  • Gọi số mã hóa của phòng a và b lần lượt là x và y. Khi đó tồn tại số tự nhiên k để:

Screenshot (147).png

đều là số lẻ.

Đồng thời, số cách di chuyển từ phòng a đến phòng b bằng số lượng số k thỏa mãn yêu cầu trên.

Tèo biết bằng mình cần đến được phòng n để thoát ra khỏi mê cung. Hỏi Tèo có bao nhiêu cách để di chuyển từ phòng 1 đến phòng n? Hai cách di chuyển được coi là khác nhau nếu Tèo đi qua một phòng trong một cách nhưng không đi qua trong cách kia, hoặc Tèo dùng 2 cách khác nhau để di chuyển giữa hai phòng. Đồng thời, vì đáp án có thể rất lớn, chỉ cần đưa ra đáp án modulo ~ 10^9 ~ + 7.

Input

  • Dòng đầu tiên gồm một số nguyên n là số phòng trong mê cung (1 ≤ n ≤ ~ 10^5 ~).
  • Dòng thứ hai gồm n số nguyên dương không lớn hơn ~ 10^9 ~ , trong đó số thứ i là mã hóa của phòng thứ i.

Output

• In ra một số nguyên duy nhất là số cách di chuyển từ phòng 1 đến phòng n modulo~ 10^9 ~ + 7.

Sample

Input #1
4
1 3 3 1
Output #1
5
Input #2
9
1 3 5 7 9 11 13 15 17
Output #2
732

Problem source: Testing Round 16


Bình luận

Hãy đọc nội quy trước khi bình luận.


Không có bình luận tại thời điểm này.