#P15783. 星谱演化档案

星谱演化档案

  • 来源:48th Petrozavodsk Programming Camp, Winter 2025,Day 3: K-ontest 1,Problem A
  • 原题名:Advanced Evolution Studies
  • 时间限制:2 秒
  • 空间限制:1024 MiB

题目描述

研究员 Ji-yeon 正在整理一批星际生物的演化档案。她希望用一棵有根树表示这些生物之间的演化关系:树上的叶子或内部节点都可以代表某个演化阶段,而编号为 11nnnn 个节点必须分别对应她已经研究过的 nn 个物种。

对于有根树中的两个节点 x,yx,y,若 x=yx=y,或 xxyy 的父节点的祖先,则称 xxyy 的祖先,yyxx 的后代。两个节点 x,yx,y 的最近公共祖先记为 lca(x,y)\operatorname{lca}(x,y)

Ji-yeon 提出了 mm 条演化假设。每条假设形如四元组 (a,b,c,d)(a,b,c,d),含义如下:

$$x=\operatorname{lca}(a,b),\qquad y=\operatorname{lca}(c,d).$$

那么必须满足:

  • xxyy 的后代;
  • xxyy 不是同一个节点。

也就是说,这条假设要求 lca(a,b)\operatorname{lca}(a,b) 严格位于 lca(c,d)\operatorname{lca}(c,d) 的子树中。

请你帮助 Ji-yeon 构造一棵满足所有假设的有根树,或者判断这样的树不存在。

构造出的树可以含有额外节点。若最终树的节点数为 NN',则必须满足

nN2n.n\le N'\le 2n.

题目保证:如果存在合法答案,则一定存在节点数不超过 2n2n 的合法答案。

输入格式

第一行包含两个整数 n,mn,m,分别表示物种数量和假设数量。

接下来 mm 行,每行包含四个整数 a,b,c,da,b,c,d,表示一条假设 (a,b,c,d)(a,b,c,d)

输出格式

如果不存在满足所有假设的有根树,输出一行:

-1

否则,第一行输出一个整数 NN',表示构造出的树的节点数。

第二行输出 NN' 个整数

p1,p2,,pN,p_1,p_2,\ldots,p_{N'},

其中 pip_i 表示节点 ii 的父节点编号;若节点 ii 是根,则 pi=0p_i=0

节点 11nn 必须分别对应原来的 nn 个物种。若有多种合法构造,输出任意一种即可。

数据范围

  • 4n20004\le n\le 2000
  • 1m20001\le m\le 2000
  • 1a,b,c,dn1\le a,b,c,d\le n
  • aba\ne b
  • cdc\ne d

样例 1

输入

6 2
1 2 3 5
2 5 1 4

输出

7
3 3 7 6 7 0 6

样例 2

输入

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

输出

-1