#53. 拓扑排序

拓扑排序

问题描述

给定一个 nn 个点 mm 条边的有向图,点的编号 1n1\sim n。图中可能有重边和自环。

请输出该有向图中字典序最小的拓扑序列,若拓扑序列不存在,输出 -1

拓扑序列拓扑排序 是针对一个有向无环图(DAG)的节点排序,它满足以下条件:

  • 对于图中的每一条边 (x,y)(x, y),节点 xx 在序列中必须出现在节点 yy 之前。换句话说,拓扑序列确保所有的依赖关系都满足,即每个节点的所有前驱节点都在其之前出现在序列中。

输入格式

第一行输入两个正整数 n,mn,m,表示点数和边数。(1n,m105)(1\le n,m\le 10^5)

接下来输入 mm 行,每行两个正整数 a,ba,b。表示点 aabb 有一条有向边。(1a,bn)(1\le a,b\le n)

输出格式

输出有向图的字典序最小的拓扑序列,若其不存在则输出 -1

样例输入

4 4
1 2
2 3
3 4
2 4

样例输出

1 2 3 4

说明

图片描述

[1,2,3,4][1,2,3,4] 是符合题目要求且字典序最小的拓扑序列。