cercetasi

Time limit: 1s Memory limit: 64MB Input: cercetasi.in Output: cercetasi.out

Ionuț s-a înscris recent într-o trupă de cercetași și se pregătește pentru prima sa expediție. Trupa din care face parte Ionuț este formată din NN membri, numerotați cu numere naturale de la 11 la NN. Pentru expediție, trupa trebuie să se împartă în mai multe patrule, fiecare membru ii trebuie să facă parte din exact o patrulă. Între cercetașii din trupă există niște tensiuni, astfel cercetașul ii și cercetașul jj (cu iji \neq j) pot face parte din aceeași patrulă doar dacă ijr|i - j| \geq r (unde x|x| reprezintă valoarea absolută a numărului xx).

Cerințe

Ionuț, fiind foarte pasionat de numere, se întreabă în câte moduri se pot forma patrule pentru expediție, știind că cercetașul șef vrea ca trupa să se împartă în cel puțin aa patrule și cel mult bb patrule. Două moduri AA și BB de a forma patrulele se consideră diferite dacă au un număr diferit de patrule sau dacă există un cercetaș kk (cu 1kN1 \leq k \leq N) astfel încât echipa din care face parte kk în modul AA este diferită de cea din modul BB. Cum acest număr poate fi foarte mare, se cere afișarea lui modulo 109+710^9 + 7.

Date de intrare

Fișierul de intrare cercetasi.in conține o singură linie pe care se află, în ordine, numerele NN, rr, aa și bb cu semnificația din enunț. Numerele sunt separate prin câte un spațiu.

Date de ieșire

Fișierul de ieșire cercetasi.out va conține, pe o singură linie numărul de moduri în care se pot forma patrulele pentru expediție, modulo 109+710^9 + 7.

Restricții și precizări

  • 1N100 0001 \leq N \leq 100 \ 000
  • 1rabN1 \leq r \leq a \leq b \leq N
# Punctaj Restricții
1 4 1N101 \leq N \leq 10, a=ba = b, r=1r = 1
2 6 1N101 \leq N \leq 10
3 8 10<N50010 < N \leq 500, b=2b = 2
4 6 500<N5 000500 < N \leq 5 \ 000, a=N1a = N - 1
5 7 500<N5 000500 < N \leq 5 \ 000, r=1r = 1
6 9 500<N5 000500 < N \leq 5 \ 000
7 5 1bN5 000 0001 \leq b \cdot N \leq 5 \ 000 \ 000, r=1r = 1
8 6 1bN5 000 0001 \leq b \cdot N \leq 5 \ 000 \ 000
9 10 5 000<N100 0005 \ 000 < N \leq 100 \ 000, 0ba1000 \leq b - a \leq 100, r=1r = 1
10 13 5 000<N100 0005 \ 000 < N \leq 100 \ 000, 0ba1000 \leq b - a \leq 100
11 5 r=a1r = a - 1 sau r=ar = a
12 21 Fără restricții suplimentare

Exemplul 1

cercetasi.in

4 1 2 2

cercetasi.out

7

Explicație

În primul exemplu avem n=4n = 4 cercetași, oricare doi putând face parte din aceeași patrulă, deoarece r=1r = 1. Cum a=b=2a = b = 2 trebuie să aflăm numărul de moduri de a împărți cercetașii în două patrule. Avem următoarele 7 moduri:

({1},{2,3,4})(\{1\}, \{2, 3, 4\}); ({2},{1,3,4})(\{2\}, \{1, 3, 4\}); ({3},{1,2,4})(\{3\}, \{1, 2, 4\}); ({4},{1,2,3})(\{4\}, \{1, 2, 3\}); ({1,2},{3,4})(\{1, 2\}, \{3, 4\}); ({1,3},{2,4})(\{1, 3\}, \{2, 4\}); ({1,4},{2,3})(\{1, 4\}, \{2, 3\}).

Exemplul 2

cercetasi.in

5 2 2 3

cercetasi.out

8

Explicație

În al doilea exemplu avem n=5n = 5 cercetași, oricare doi alăturați neputând face parte din aceeași patrulă, deoarece r=2r = 2. Avem a=2a = 2 și b=3b = 3, deci trebuie să aflăm numărul de moduri de a împărți cercetașii în două sau trei patrule.

Pentru a împărți cercetașii în două patrule avem o posibilitate:

({1,3,5},{2,4})(\{1, 3, 5\}, \{2, 4\}).

Observăm aici că o împărțire de forma ({1,3,4},{2,5})(\{1, 3, 4\}, \{2, 5\}) nu este posibilă deoarece 11 și 44 fac parte din aceeași patrulă, dar 43=1<r=2|4 - 3| = 1 < r = 2.

Trebuie acum să aflăm numărul de moduri de a împărți cercetașii în trei patrule. Avem 7 posibilități:

({1},{2,4},{3,5})(\{1\}, \{2, 4\}, \{3, 5\}); ({1,3},{2,4},{5})(\{1, 3\}, \{2, 4\}, \{5\}); ({1,3},{2,5},{4})(\{1, 3\}, \{2, 5\}, \{4\}); ({1,3,5},{2},{4})(\{1, 3, 5\}, \{2\}, \{4\}); ({1,4},{2,5},{3})(\{1, 4\}, \{2, 5\}, \{3\});

({1,5},{2,4},{3})(\{1, 5\}, \{2, 4\}, \{3\}); ({1,4},{2},{3,5})(\{1, 4\}, \{2\}, \{3, 5\}).

Astfel, sunt în total 1+7=81 + 7 = 8 posibilități.

Exemplul 3

cercetasi.in

97 3 8 29

cercetasi.out

987428607

Log in or sign up to be able to send submissions!