任务安排
题号:NC263968
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
Special Judge, 64bit IO Format: %lld

题目描述

又到了忙碌的星期一。沃若打开飞书,发现有 n 个任务需要完成。为了方便起见,沃若对任务从 1n 进行编号。

他每次会选择一个任务,做完当前任务以后才会开始选择下一个任务去完成。

但这些任务可不是随便想做哪个就可以做哪个的。具体来说,任务之间有 m 对依赖关系 (u, v),表示在做编号为 v 的任务之前,必须先完成编号为 u 的任务。

特别地,还有一个长度为 k 的序列 a,表示 k 个指定任务的编号,沃若需要保证这 k 个指定任务是连续完成的。即:如果某一时刻他选择了去完成编号为 a_1 的任务,那接下来他就只能依次完成编号为 a_2, a_3, \cdots, a_k 的任务。在编号为 a_k 的任务完成后,他才能选择序列 a 之外的其他任务去完成。

请你帮沃若找出一种完成任务的顺序,满足以上的所有限制。

输入描述:

输入的第一行为两个空格分隔的正整数 n (1 \leq n \leq 2 \cdot 10^5)m (1 \leq m \leq 2 \cdot 10^5),分别表示任务和依赖关系的数量。

随后 m 行,每行两个空格分隔的正整数 u (1 \leq u \leq n)v (1 \leq v \leq n, u \neq v),表示一对依赖关系。保证输入中不存在两对完全相同的依赖关系,即有序二元组 (u, v) 两两不同。

接下来一行一个正整数 k (1 \leq k \leq n),表示序列 a 的长度。

随后一行 k 个空格分隔的正整数 a_i (1 \leq i \leq k, 1 \leq a_i \leq n),表示序列 a,含义如题目描述中所示。保证输入的序列 a 中的数字两两不同。

输出描述:

输出一行 n 个空格分隔的正整数,表示完成任务的顺序。

如果有多个满足条件的解,你可以输出任意一个。

如果无解,则输出一行一个整数 -1
示例1

输入

复制
4 4
2 4
1 2
3 4
1 3
2
2 4

输出

复制
1 3 2 4
示例2

输入

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

输出

复制
-1