Massivin başlanğıcı#3906

Massivin başlanğıcı

2 saniyə
256 meqabayt
Çətin

Bir çox proqramlaşdırma dilində, bütün bir massivi və ya onun bir hissəsini müəyyən bir dəyərlə doldurmağa imkan verən funksiyalar mövcuddur. Pascal dilində bu funksiya fillchar(), Java dilində Arrays.fill(), C++ dilində isə memset() adlanır. Yeni J# proqramlaşdırma dilində isə yalnız məntiqi tipli massivlərlə işləyən mark() funksiyası təqdim edilib.

İki parametr a və b ilə çağırılan mark funksiyası, indeksləri a-dan b-yə qədər olan massiv elementlərinə true dəyərini təyin edir. Məsələn, uzunluğu 4 olan, elementləri birdən nömrələnmiş və başlanğıcda bütün dəyərləri false olan bir massiv götürsək və onun üzərində mark(1, 3) və mark(2, 4) əməliyyatlarını yerinə yetirsək, bütün massiv true dəyərləri ilə doldurulmuş olacaq.

J# dilini öyrənənlər üçün ilk tapşırıqlardan biri, dəqiq M mark əməliyyatını ehtiva edən və başlanğıcda false dəyərləri ilə doldurulmuş uzunluğu N olan bir massivi tamamilə true dəyərləri ilə dolduran bir proqram yazmaqdır.

Siz bu tapşırığı tez bir zamanda yerinə yetirdiniz və indi düşünürsünüz: bunu neçə fərqli üsulla etmək olar? Fərqli üsullar, iki proqramda i-ci mark əməliyyatının ən azı bir i üçün 1-dən M-ə qədər olan parametrlərlə fərqli şəkildə başladığı üsullardır. Bu rəqəm böyük ola bilər, buna görə də onu 10^9+7 moduluna görə hesablamaq lazımdır.

Giriş

Giriş faylının ilk sətirində iki natural ədəd N və M verilmişdir — massiv uzunluğu və proqramda olmalı olan mark əməliyyatlarının sayı (1 ≤ N, M ≤ 70).

Çıxış

Çıxış faylının yeganə sətirində M mark əməliyyatlarının köməyi ilə N elementli massivi true dəyərləri ilə doldurma üsullarının sayının 10^9+7 moduluna görə qalıqını çıxarın.

Misal üçün izah

Axtarılan variantlar:

  • mark(1, 1); mark(1, 2)

  • mark(1, 1); mark(2, 2)

  • mark(1, 2); mark(1, 1)

  • mark(1, 2); mark(1, 2)

  • mark(1, 2); mark(2, 2)

  • mark(2, 2); mark(1, 1)

  • mark(2, 2); mark(1, 2)

Nümunələr

Nümunə 1

Loading
Loading