ENG  RUSTimus Online Judge
Online Judge
Задачи
Авторы
Соревнования
О системе
Часто задаваемые вопросы
Новости сайта
Форум
Ссылки
Архив задач
Отправить на проверку
Состояние проверки
Руководство
Регистрация
Исправить данные
Рейтинг авторов
Текущее соревнование
Расписание
Прошедшие соревнования
Правила

2173. Мета-условие 3

Ограничение времени: 2.0 секунды
Ограничение памяти: 256 МБ
...Затем Вадим принялся писать ещё одно условие, как вдруг...
У некоторого контеста появилось N спонсоров, причём каждый из них хочет увидеть название своей компании в условиях ровно si различных задач. Однако участники этого контеста не хотят видеть в одном и том же условии отсылки более чем к 2-м различным спонсорам.
Жюри, несомненно, могут справиться с такими требованиями, но у них возник вопрос другого рода. Уже известно, что всего задач в контесте будет M, и как они расставлены между собой в комплекте. Теперь в любое из условий можно вписать названия не более двух компаний (например, «DOUBLETAPP» и «X-tensive»). Теперь же стало интересно, сколько способов существует это сделать. Два способа различаются, если у хотя бы одной задачи отличается набор упомянутых спонсоров.
Однако же сейчас жюри занято вписыванием спонсоров в условия, поэтому задача посчитать количество способов это сделать достаётся Вам.

Исходные данные

В первой строке даны два целых числа N и M — количество спонсоров у контеста и количество задач в комплекте (1 ≤ N ≤ 1000, 1 ≤ M ≤ 2000).
Во второй строке через пробел даны N целых чисел si — пожелания каждого спонсора (1 ≤ siM).
Гарантируется, что суммарное число пожеланий не превосходит 2 · M.

Результат

Выведите количество способов вписать названия компаний-спонсоров в комплект по модулю 109+7. То есть, найдите остаток при делении количества способов на 1 000 000 007.

Примеры

исходные данныерезультат
2 2
1 1
4
5 13
1 1 1 1 1
351780

Замечания

В первом примере существует только четыре способа вписать названия спонсоров:
  • В первую задачу вписаны оба спонсора, во второй — ни одного;
  • В первую задачу никто не вписан, во вторую — оба;
  • В первую задачу вписан первый спонсор, во вторую — второй;
  • В первую задачу вписан второй спонсор, во вторую — первый.
Автор задачи: Вадим Баринов
Источник задачи: Уральская командная олимпиада по программированию 2022