Задача D. Машинное обучение

Автор:Центральная предметно-методическая комиссия   Ограничение времени:2 сек
Входной файл:Стандартный вход   Ограничение памяти:512 Мб
Выходной файл:Стандартный выход  
Максимальный балл:100  

Условие

В лаборатории искусственного интеллекта разработали новый метод машинного обучения. В процессе обучения программы используется n итераций. Каждая итерация заключается в том, что обучаемая программа запускается на некотором обучающем наборе.

Были подготовлены обучающие наборы сложности от 0 до k. План обучения задаётся массивом целых чисел [a1, a2, , an], где ai задаёт сложность набора, используемого на i-й итерации обучения. Для всех i от 1 до n должно выполняться неравенство 0 ≤ ai ≤ k.

Выяснилось, что эффективность плана обучения зависит от битовых представлений сложностей обучающих наборов. Для того, чтобы план был эффективным, необходимо, чтобы для любых двух значений i и j, где 1 ≤ i ≤ j ≤ n, выполнялось (ai and aj) = ai. Напомним, что побитовое «и» (and) двух целых неотрицательных чисел устроено следующим образом: запишем оба числа в двоичной системе счисления, i-й двоичный разряд результата равен 1, если у обоих аргументов он равен 1. Например, (14 and 7) = (11102 and 01112) = 1102 = 6. Эта операция реализована во всех современных языках программирования, в языках C++, Java и Python она записывается как "&", в Паскале как "and".

Однако постоянное использование наборов одной сложности не даёт прогресса в обучении. Чтобы этого избежать, для плана обучения должны быть выполнены m требований следующего вида. Каждое требование задаётся двумя числами li и ri и означает, что ali ≠ ari.

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

Требуется написать программу, которая по заданным целым числам n и k, а также m требованиям вида li, ri определяет количество эффективных планов, которые удовлетворяют всем требованиям, и выводит остаток от деления этого количества на число 109 + 7.

Формат входных данных

Первая строка входных данных содержит три целых числа n, m и k — количество итераций обучения, количество требований и максимальную сложность обучающего набора.

Следующие m строк описывают требования, i-я строка содержит два целых числа li, ri, которые означают, что ali ≠ ari, 1 ≤ li < ri ≤ n. Гарантируется, что все требования различны.

Формат выходных данных

Выведите одно целое число — остаток от деления количества эффективных планов, удовлетворяющих всем требованиям, на число 109 + 7.

Ограничения

1 ≤ n ≤ 3 ⋅ 105, 0 ≤ m ≤ 3105, 0 ≤ k ≤ 1018, ali ≠ ari, 1 ≤ li < ri ≤ n

Описание подзадач и системы оценивания

Баллы за каждую подзадачу начисляются только в случае, если все тесты этой подзадачи и необходимых подзадач успешно пройдены.

Подзадача Баллы Ограничения Необходимые подзадачи Информация о проверке
181 ≤ n ≤ 500, m = 0, 0 ≤ k ≤ 500полная
2201 ≤ n ≤ 3 ⋅ 105, m = 0, 0 ≤ k ≤ 1071первая ошибка
3101 ≤ n ≤ 3 ⋅ 105, m = 0, 0 ≤ k ≤ 10181, 2первая ошибка
481 ≤ n ≤ 50, 0 ≤ m ≤ 50, 0 ≤ k ≤ 50первая ошибка
5161 ≤ n ≤ 2000, 0 ≤ m ≤ 2000, 0 ≤ k ≤ 1071, 4первая ошибка
661 ≤ n ≤ 2000, 0 ≤ m ≤ 2000, 0 ≤ k ≤ 10181, 4, 5первая ошибка
7101 ≤ n ≤ 3 ⋅ 105, 0 ≤ m ≤ 200, 0 ≤ k ≤ 1071, 2, 4первая ошибка
861 ≤ n ≤ 3 ⋅ 105, 0 ≤ m ≤ 200, 0 ≤ k ≤ 10181, 2, 3, 4, 7первая ошибка
9161 ≤ n ≤ 3 ⋅ 105, 0 ≤ m ≤ 3105, 0 ≤ k ≤ 10181 - 8первая ошибка

Пояснения к примерам

Все возможные планы для первого теста: [0,0], [0,1], [0,2], [0,3], [1,1], [1,3], [2,2], [2,3], [3,3]. Для второго теста: [0,1,1], [0,2,2].

Примеры тестов

Стандартный вход Стандартный выход
1
2 0 3
9
2
3 1 2
1 2
2

0.091s 0.009s 13