Lê xếp \(n\) hạt cườm thành một vòng tròn theo chiều kim đồng hồ, ban đầu, các hạt có mã màu lần
lượt tương ứng là \(a_{1} = 0, a_{2} = 0, … , a_{n} = 0\). Lê có hai loại lệnh để thay đổi mã màu như sau:
-
Lệnh \(D\) \(i\), gấp đôi mã màu của một hạt, cụ thể: \(a_{i} = a_{i} × 2\), lệnh này chỉ được thực hiện nếu \(a_{i} > 0\);
-
Lệnh \(P\) \(i\), gấp đôi và thêm \(1\) vào mã màu của hai hạt kề nhau, cụ thể: \(a_{i} = a_{i} x 2 + 1\) và \(a_{j} = a_{j} \cdots 2+ 1\), trong đó \(j\) là hạt kề tiếp theo của hạt \(i\) theo chiều kim đồng hồ.
Lê muốn tìm cách thay đổi dãy mã màu ban đầu (tất cả đều bằng \(0\)) về trạng thái yêu thích bằng
cách dùng hai loại lệnh trên.
Yêu cầu: Cho dãy số nguyên không âm \(b_{1}, b_{2}, … , b_{n}\), hãy giúp Lê đếm số cách thay đổi dãy mã màu ban đầu về dãy mã màu \(b_{1}, b_{2}, … , b_{n}\) (hai cách được gọi là khác nhau nếu số bước sử dụng khác nhau hoặc ở bước thứ \(t\) của cách này sử dụng lệnh khác với lệnh thứ \(t\) của cách kia).
Input
• Dòng đầu tiên gồm số nguyên \(n\);
• Dòng thứ hai chứa \(n\) số nguyên không âm \(b_{1}, b_{2}, … , b_{n}\) \((1 ≤ b_{i} ≤ 10^9)\).
Output
Ghi ra thiết bị ra chuẩn một dòng chứa một số là phần dư khi chia số cách thực hiện được
cho \(10^9 + 7\).
Example
Test 1
Input
3
1 3 2
Output
3
Scoring
• Có \(25\%\) số test ứng với \(25\%\) số điểm của bài có \(n = 3\) và \(b_{i} ≤ 3\);
• Có 2\(25\%\) số test khác ứng với \(25\%\) số điểm của bài có \(n = 3\); \(b_{i} ≤ 30\);
• Có \(25\%\) số test khác ứng với \(25\%\) số điểm của bài có \(n \leq 5\); \(b_{i} ≤ 1000\);
• Có \(25\%\) số test còn lại ứng với \(25\%\) số điểm của bài có \(n \leq 5\); \(b_{i} ≤ 10000\).
Bình luận
Đăng nhập để bình luận
Chưa có bình luận nào.