Олимпиадный тренинг

Задача . F. Почти перестановка


Задача

Темы: Потоки *2200

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

Иван прекрасно помнит, что в массиве было n элементов, и каждый из них был не меньше 1 и не больше n. Также он помнит q фактов про массив. Существуют два типа фактов, которые помнит Иван:

  • 1 li ri vi — для каждого x, такого, что li ≤ x ≤ ri, ax ≥ vi;
  • 2 li ri vi — для каждого x, такого, что li ≤ x ≤ ri, ax ≤ vi.

Также Иван считает, что этот массив был перестановкой, но в этом Иван совсем не уверен. Он хочет восстановить такой массив, который бы соответствовал q фактам, в которых Иван точно уверен, и был бы похож на перестановку. Формально, Иван определил стоимость (cost) массива как:

, где cnt(i) равно количеству вхождений i в массив.

Помогите Ивану определить минимально возможную величину cost массива, который бы соответствовал заданным фактам!

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

В первой строке заданы два числа n и q (1 ≤ n ≤ 50, 0 ≤ q ≤ 100).

Затем следуют q строк, каждая из которых обозначает один из фактов о массиве. В i-й строке записаны четыре целых числа ti, li, ri и vi для i-го факта (1 ≤ ti ≤ 2, 1 ≤ li ≤ ri ≤ n, 1 ≤ vi ≤ n, ti обозначает тип факта).

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

Если факты противоречат друг другу и не существует массива, который бы им соответствовал, выведите -1. Иначе выведите минимально возможное значение величины cost.


Примеры
Входные данныеВыходные данные
1 3 0
3
2 3 1
1 1 3 2
5
3 3 2
1 1 3 2
2 1 3 2
9
4 3 2
1 1 3 2
2 1 3 1
-1

time 3000 ms
memory 512 Mb
Правила оформления программ и список ошибок при автоматической проверке задач

Статистика успешных решений по компиляторам
 Кол-во
С++ Mingw-w645
Комментарий учителя