В багатьох мовах програмування є функції, які відповідають за заповнення усього масиву або деякої його частини певним значенням. У мові Pascal це функція fillchar(), у Java — Arrays.fill(), у C++ — memset(). У новій мові програмування J# з'явилась функція mark(), яка вміє працювати лише з масивами логічного типу.
Функція mark, викликана з двома параметрами та , присвоює усім елементам масиву з індексами від до включно значення . Так, якщо взяти масив довжини , елементи якого пронумеровано з одиниці і усі значення у якому спочатку рівні , і виконати з ним операції mark(1, 3) та mark(2, 4), то увесь масив виявиться заповнений значеннями .
Одним з перших завдань для тих, хто починає вивчати J#, є написання програми, яка містить рівно операцій , і повністю заповнює значеннями масив довжини , який спочатку заповнено значеннями .
Ви швидко впорались з цим завданням, і тепер задумались: скількома різними способами це можна зробити? Різними вважаються такі способи, у яких -ту операцію у двох програмах запущено з різними параметрами хоча б для одного від до . Це число може бути великим, тому потрібно порахувати його по модулю 10^9 + 7.
У першому рядку вхідного файлу задано два натуральних числа та — довжина масиву та кількість операцій , які повинні бути у програмі (1 \leq N, M \leq 70).
У єдиному рядку вихідного файлу виведіть остачу від ділення числа способів заповнити масив з елементів значеннями за допомогою викликів операції на число 10^9 + 7.
Приклад 1
Шукані варіанти:
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)