F. Инициализация массива

Имя входного файла: init.in
Имя выходного файла: init.out
Ограничение по времени: 2 s
Ограничение по памяти: 256 megabytes

Во многих языках программирования есть функции, которые отвечают за заполнение всего массива или некоторой его части определенным значением. В языке Pascal это функция fillchar(), в Java – Arrays.fill(), в C++ – memset(). В новом языке программирования J\# появилась функция mark(), которая умеет работать только с массивами логического типа.

Функция mark, вызванная от двух параметров a и b, присваивает всем элементам массива с индексами от a до b включительно значение true, Так, если взять массив длины 4, элементы которого нумеруются с единицы и все значения в котором изначально равны false, и выполнить с ним операции mark(1, 3) и mark(2, 4), то весь массив окажется заполнен значениями true.

Одним из первых заданий для тех, кто начинает изучать J\#, является написание программы, содержащей ровно M операций mark, и полностью заполняющей значениями true массив длины N, изначально заполненный значениями false.

Вы быстро справились с этим заданием, и теперь задумались: сколькими различными способами это можно сделать? Различными считаются такие способы, в которых i-я операция mark в двух программах запущена с разными параметрами хотя бы для одного i от 1 до M. Это число может быть большим, поэтому требуется посчитать его по модулю 109+7.

Формат входного файла

В первой строке входного файла даны два натуральных числа N и M – длина массива и количество операций mark, которые должны быть в программе. (1 ≤ N, M ≤ 70).

Формат выходного файла

В единственной строке выходного файла выведите остаток от деления числа способов заполнить массив из N элементов значениями true с помощью M вызовов операции mark на число 109+7.

Пример:

init.ininit.out
2 2 7

Искомые варианты:

  • 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)


Источник: Командный чемпионат школьников Карелии по программированию, 4 ноября 2012

Обсудить       Отправить решение