#CF863F. 几乎排列

几乎排列

F. 几乎排列

每次测试的时间限制:3 秒
每次测试的内存限制:512 兆字节

最近,伊万在调试代码时注意到了一个数组 aa。现在伊万记不清这个数组了,但他试图修复的漏洞仍然存在,因此伊万认为这个数组中的数据可能有助于他重现这个 bug。

伊万清楚地记得数组中有 nn 个元素,每个元素的值不小于 11 且不大于 nn。此外,他还记得关于该数组的 qq 条事实。事实有以下两种类型:

  • 类型 1 li ri vil_i\ r_i\ v_i —— 对于每个满足 lixril_i \le x \le r_ixx,有 axvia_x \ge v_i
  • 类型 2 li ri vil_i\ r_i\ v_i —— 对于每个满足 lixril_i \le x \le r_ixx,有 axvia_x \le v_i

伊万认为这个数组可能是一个排列,但他不太确定。他想恢复一个满足上述 qq 条事实、并且尽可能“接近”排列的数组。形式化地,伊万定义数组的代价为:

i=1n(cnt(i))2\sum_{i=1}^{n} \big( \text{cnt}(i) \big)^2

其中 cnt(i)\text{cnt}(i) 是数字 ii 在数组中出现的次数。

请帮助伊万确定满足所有事实的数组的最小可能代价。

输入
第一行包含两个整数 nnqq1n501 \le n \le 500q1000 \le q \le 100)。
接下来 qq 行,每行描述一条事实。第 ii 行的格式为 ti,li,ri,vit_i, l_i, r_i, v_i1ti21 \le t_i \le 21lirin1 \le l_i \le r_i \le n1vin1 \le v_i \le ntit_i 表示事实的类型)。

输出
如果这些事实相互矛盾,不存在任何满足条件的数组,则输出 1-1
否则,输出满足所有事实的数组的最小可能代价。

示例

输入

3 0

输出

3

输入

3 1
1 1 3 2

输出

5

输入

3 2
1 1 3 2
2 1 3 2

输出

9

输入

3 2
1 1 3 2
2 1 3 1

输出

-1