传送门
题号:NC236210
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

有 n 个点, m 种类型的传送门。每一个点上都可能有若干(可能为0)个不同类型的传送门。对于 i 类型的传送门,你可以花费 t_i 的时间移动到任意一个 i 类型的传送门。Alice初始位于1号点,Bob初始位于 n 号点,他们可以同时进行移动,并且他们希望花费尽可能少的时间移动到同一个点上,你能帮帮他们吗。

输入描述:

第一行输入两个整数  ,分别表示点数和传送门类型数。

接下来 m 行,分别描述每一个类型的传送门。对于每一行,首先输入两个整数  ,分别表示穿过这个类型的传送门需要消耗的时间,以及这个类型的传送门的数量。接下来包含 S_i 个不同的正整数  ,表示这个类型的传送门分布在哪些点上。保证  。

输出描述:

如果Alice和Bob不能移动到同一点上,输出一行-1。否则,输出两行,第一行表示他们需要花费的最少时间,第二行输出他们可以在保证花费时间最少的前提下可以相遇的点。如果有多个,你需要升序输出它们。
示例1

输入

复制
5 4
1 3 1 2 3
2 2 3 4
10 2 1 5
3 3 3 4 5

输出

复制
3
3 4

说明

Alice可以用类型1的传送门,花费1的时间到达3号点,Bob用类型4的传送门,花费3的时间到达3号点。最终花费3的时间。

此外,Alice也可以用类型1的传送门先到达3号点,再用类型2的传送门花费2的时间到达4号点,Bob用类型4的传送门花费3的时间到达4号点。最终花费3的时间。

示例2

输入

复制
3 1
1 2 1 2

输出

复制
-1