Description
有一个包含 N 个节点和 M 条边的有向图 G。每个节点编号为 1 到 N,每条边编号为 1 到 M。对于每个 i(1≤i≤M),边 i 从顶点 ui 指向顶点 vi,并且具有 唯一 的颜色 ci。
一条 路径 定义为边的序列 e1,e2,⋯,el,其中对于每个 1≤k<l,vek(边 ek 的终点)与 uek+1(边 ek+1 的起点)相同。我们可以说路径 e1,e2,⋯,el 从顶点 ue1 开始,到顶点 vel 结束。注意同一条边可以在一条路径中出现多次。
路径 e1,e2,⋯,el 的 颜色序列 定义为 ce1,ce2,⋯,cel。
考虑图 G 中从顶点 S 到顶点 T 的所有长度不超过 10100 的路径的颜色序列。请编写一个程序,找出这些序列中字典序最小的序列。
输入的第一行包含四个以空格分隔的整数 N、M、S 和 T(1≤N≤100,000,0≤M≤300,000,1≤S≤N,1≤T≤N,S=T)。
接下来是 M 行:第 j(1≤j≤M)行包含三个以空格分隔的整数 ui、vi 和 ci(1≤ui,vi≤N,ui=vi,1≤ci≤109);它描述了一条从顶点 ui 指向顶点 vi 且颜色为 ci 的有向边。
图中没有重边,且每条边有唯一的颜色。形式化地说,对于任意 1≤i<j≤M,ci=cj 且 (ui,vi)=(uj,vj) 成立。
如果不存在从顶点 S 到顶点 T 的路径,输出 IMPOSSIBLE(不带引号)。
否则,设 a1,a2,⋯,al 是从顶点 S 到顶点 T 的所有长度不超过 10100 的路径的颜色序列中字典序最小的序列。
- 如果 l≤106,在第一行输出 a1,a2,⋯,al。每个输出的整数之间应有空格。
- 如果 l>106,输出
TOO LONG(不带引号)。
3 3 1 3
1 2 1
2 3 7
1 3 5
1 7
3 4 1 3
1 2 1
2 1 2
2 3 7
1 3 5
TOO LONG
2 0 2 1
IMPOSSIBLE
Hint
序列 p1,p2,⋯,pn 在字典序上小于另一个序列 q1,q2,⋯,qm,当且仅当以下条件之一成立:
- 存在唯一的 j(0≤j<min(n,m))使得 p1=q1,p2=q2,⋯,pj=qj 且 pj+1<qj+1。
- n<m 且 p1=q1,p2=q2,⋯,pn=qn。换句话说,p 是 q 的严格前缀。
翻译由 DeepSeek V3 完成