CSES - Datatähti 2019 loppu - Binääripuu
  • Time limit: 1.00 s
  • Memory limit: 512 MB

Binääripuussa on n tasoa ja puu on täydellinen, eli jokaisella solmulla on kaksi lasta alinta tasoa lukuun ottamatta. Puun solmut on indeksoitu niin, että juuren indeksi on 1 ja solmun k vasemman ja oikean lapsen indeksit ovat 2k ja 2k+1. Puussa on lisäksi m kiellettyä kaarta, joita pitkin ei saa kulkea.

Puusta muodostetaan verkko peilaamalla se lehtisolmuista. Monellako tavalla verkossa voi muodostaa polun, joka alkaa ja päättyy alkuperäisen puun juuressa, sisältää vähintään yhden kaaren eikä kulje monta kertaa saman kaaren kautta?

Esimerkiksi seuraavassa verkossa on 12 mahdollista polkua:

Syöte

Syötteen ensimmäisellä rivillä on kaksi kokonaislukua n ja m: puun korkeus ja kiellettyjen kaarien määrä.

Tämän jälkeen syötteessä on m kokonaislukua a_1, a_2, \dots, a_m, kukin omalla rivillään. Luku a_i tarkoittaa, että solmujen a_i ja \left \lfloor{\frac{a_i}{2}}\right \rfloor välistä kaarta ei saa kulkea. Kukin tällainen kaari annetaan kerran.

Tuloste

Tulosta yksi kokonaisluku: erilaisten polkujen määrä modulo 10^9+7.

Esimerkki

Syöte:

4 3
10
5
13

Tuloste:

12

Kuva vastaa esimerkkisyötettä. Kielletyt kaaret on merkitty punaisella.

Osatehtävä 1 (23 pistettä)

  • 2 \leq n \leq 6

Osatehtävä 2 (26 pistettä)

  • 2 \leq n \leq 60
  • m = 0

Osatehtävä 3 (51 pistettä)

  • 2 \leq n \leq 60
  • 0 \leq m \leq 10^5