Школа программиста

Забыли пароль?
[задачи] [курсы] [олимпиады] [регистрация]
Логин:   Пароль:    
Скрыть меню
О школе
Правила
Олимпиады
Фотоальбом
Гостевая
Форум
Архив олимпиад
Архив задач
Состояние системы
Рейтинг
Курсы
Новичкам
Работа в системе
Курсы ККДП
Дистрибутивы
Статьи
Ссылки


 

Разбиение на тройки

(Время: 1 сек. Память: 128 Мб Сложность: 66%)

На день рождения Маше как обычно подарили массив a из n натуральных чисел, в котором каждое число находится в пределах от 1 до m включительно. Маша очень любит число три, поэтому длина массива делится на три.

Маша решила объединять числа в тройки: каждая тройка чисел должна состоять или из трех одинаковых чисел, или из трех последовательных чисел. Другими словами, каждая тройка имеет или вид (x, x, x), или (x, x+1, x+2), где x – какое-то натуральное число.

Маша хочет поиграть с подаренным массивом, и ее интересует количество способов разбить числа этого массива на такие тройки. Два способа разбиения считаются различными, если нельзя установить взаимно-однозначное соответствие между тройками первого разбиения и тройками второго разбиения, что числа внутри соответствующих троек равны. Так как количество разбиений может быть большим, Маше достаточно знать его остаток по модулю 109+7.

Помогите Маше посчитать количество способов разбить числа подаренного ей массива на тройки по модулю 109+7.

Входные данные

Первая строка входного файла INPUT.TXT содержит два целых числа n и m (1 ≤ n ≤ 5000, 1 ≤ m ≤ 5000, n = 3×k для какого-то натурального k).

Вторая строка содержит n целых чисел ai – числа массива (1 ≤ ai ≤ m).

Выходные данные

В единственную строку выходного файла OUTPUT.TXT выведите одно целое число – количество способов разбить числа массива на тройки по модулю 109+7.

Примеры

INPUT.TXTOUTPUT.TXT
19 4
3 4 2 4 4 2 3 3 2
2
26 3
1 2 3 1 2 1
0

Замечание

В первом примере числа можно разбить на тройки двумя способами: {(2, 2, 2), (3, 3, 3), (4, 4, 4)} и {(2, 3, 4), (2, 3, 4), (2, 3, 4)}.


Для отправки решения задачи необходимо зарегистрироваться и авторизоваться!

[Обсуждение] [Все попытки] [Лучшие попытки]


 Язык программирования C++
 Решение олимпиадных задач
 Региональные олимпиады
 Книги Фёдора Меньшикова
 Тренировочные олимпиады
 Школьный этап
 Муниципальный этап
 Региональный этап
 Полуфинал ВКОШП
 Личное первенство СФУ
 2006 / 2007
 2007 / 2008
 2008 / 2009
 2009 / 2010
 2010 / 2011
 2011 / 2012
 2012 / 2013
 2013 / 2014
 2014 / 2015
 2015 / 2016
 2016 / 2017
 2017 / 2018
 2018 / 2019
 2019 / 2020
 2020 / 2021
 2021 / 2022
 2022 / 2023
 2023 / 2024
 A. Посадка в самолет
 B. Битоническая последовательность
 C. Игра с таблицей
 D. Выбор столицы
 E. Разбиение массива
 F. Бактерии
 G. Разбиение на тройки
 H. Обходы бинарного дерева

Красноярский краевой Дворец пионеров, (c)2006 - 2024, ИНН 246305493507, E-mail: admin@acmp.ru