#CF863F. 几乎排列
几乎排列
F. 几乎排列
每次测试的时间限制:3 秒
每次测试的内存限制:512 兆字节
最近,伊万在调试代码时注意到了一个数组 。现在伊万记不清这个数组了,但他试图修复的漏洞仍然存在,因此伊万认为这个数组中的数据可能有助于他重现这个 bug。
伊万清楚地记得数组中有 个元素,每个元素的值不小于 且不大于 。此外,他还记得关于该数组的 条事实。事实有以下两种类型:
- 类型 1 —— 对于每个满足 的 ,有 ;
- 类型 2 —— 对于每个满足 的 ,有 。
伊万认为这个数组可能是一个排列,但他不太确定。他想恢复一个满足上述 条事实、并且尽可能“接近”排列的数组。形式化地,伊万定义数组的代价为:
其中 是数字 在数组中出现的次数。
请帮助伊万确定满足所有事实的数组的最小可能代价。
输入
第一行包含两个整数 和 (,)。
接下来 行,每行描述一条事实。第 行的格式为 (,,, 表示事实的类型)。
输出
如果这些事实相互矛盾,不存在任何满足条件的数组,则输出 。
否则,输出满足所有事实的数组的最小可能代价。
示例
输入
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