#P1078. 引擎模块

引擎模块

题目描述

薯条哥是一名软件工程师,他正在为一家游戏公司开发一个新的3D引擎。这个引擎由多个模块组成,每个模块负责不同的功能,比如渲染、物理、音效、网络等。

为了提高性能和稳定性,薯条哥需要在游戏启动时初始化这些模块,但是有一个问题:不同的模块之间存在依赖关系,比如渲染模块依赖于物理模块,音效模块依赖于网络模块等。如果薯条哥不按照正确的顺序初始化这些模块,就会导致错误或崩溃。

为了解决以上问题,薯条哥决定开发一个代码分析工具,用来分析代码模块之间的依赖关系,用来确定模块的初始化顺序、是否有循环依赖等问题。

薯条哥的工具可以一次初始化一个或多个模块,只要它们之间没有依赖关系。他把这个过程称为引擎模块初始化。

现在,薯条哥已经得到了一组模块间的依赖关系,薯条哥需要计算需要引擎模块初始化的次数。

输入描述

输入第一行为一个整数 n(1n1000)n(1\le n\le 1000) ,表示模块总数。

接下来的 nn 行依次表示模块 11nn 的依赖关系。

输入每行的第一个数为一个整数 m(1m1000)m(1\le m\le 1000) ,表示依赖的模块数量(不会超过 nn ),之后的数字表示当前模块依赖的模块ID序列,该序列不会重复出现相同的数字,并且模块ID的取值一定在 [1,n][1,n] 之内。

每一行里面的数字按一个空格分隔。

输出描述

输出”批量初始化次数”。

若有循环依赖无法完成初始化,则输出 1-1

样例1

输入

5
3 2 3 4
1 5
1 5
1 5
0

输出

3

说明

2,3,4都依赖于5号模块,1依赖于2,3,4号模块,5号模块不依赖于任何模块。

批量初始化顺序为 {5}>{2,3,4}>{1}\{5\}->\{2,3,4\}-> \{1\} ,共需”批量初始化” 33 次。 image

样例2

输入

3
1 2
1 3
1 1

输出

-1

说明

存在循环依赖,无法完成初始化,返回 1-1image