BITSTR - Đếm số lượng số nhị phân

Xem dạng PDF

Gửi bài giải

Điểm: 1,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

Ta gọi xâu nhị phân độ dài ~N~ là dãy gồm ~N~ kí hiệu, mỗi kí hiệu chỉ là ~1~ hoặc ~0~. Như đã biết, có tất cả ~2^N~ xâu như vậy. Trong bài toán này, ta chỉ quan tâm đến những xâu nhị phân độ dài ~N~ chứa đoạn gồm ~K~ số ~1~ liên tiếp. Vì con số này là rất lớn khi ~N~ và ~K~ lớn, nên chỉ cần đưa ra phần dư trong phép chia của số này cho ~1000007~.

Cho trước hai số nguyên dương ~N~ và ~K~, hãy tìm phần dư trong phép chia của số lượng xâu nhị phân độ dài ~N~ chứa đoạn gồm ~K~ số ~1~ liên tiếp cho ~1000007~.

Input

  • Một dòng duy nhất gồm hai số nguyên dương ~N~ và ~K\ (1 ≤ N ≤ 100000, 1 ≤ K ≤100)~.

Output

  • In ra phần dư trong phép chia của số lượng xâu nhị phân thỏa mãn cho ~1000007~.

Sample

Input #1
3 2
Output #1
3
Input #2
5 1
Output #2
31
Input #3
7 10
Output #3
0

Hint

  • Ví dụ ~1:~ Có ba xâu: ~011,110,111~;
  • Ví dụ ~2:~ Có tất cả xâu nhị phân độ dài ~5~ ngoại trừ ~00000~;
  • Ví dụ ~3:~ Không có xâu thỏa mãn.

Problem source: Kc97ble - Free Contest


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.