题号:NC223200
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 512 M,其他语言1024 M
Special Judge, 64bit IO Format: %lld
题目描述
定义两张无向简单图 G,H 是同构的,当且仅当两者的点集

大小相同,且存在一个双射

,满足若 G 中存在一条边 uv,则 H 中存在一条边
%5Cvarphi(v))
。
虽然图同构判定目前没有多项式复杂度算法,但图同构具有优美的性质,比如两张图顶点度数组成的可重集相同。
对于一张无向联通简单图 G 中的一个顶点 u,定义顶点 u 的度数
)
为 G 中以 u 为一个顶点的边数。考虑可重集
%3D%5C%7B%5Coperatorname%7Bdeg%7D(v)%7C%5Coperatorname%7Bdist%7D(u%2Cv)%3Di%5C%7D)
,其中
)
表示图 G 中 u,v 之间的最短路长度,定义顶点 u 的度分布

,注意这是列表而不是可重集。定义图 G 的*距离-度分布* 为可重集

。
例如下图的距离-度分布为

。
虽然距离-度分布是图同构的一个很强的性质,但若两个图满足距离-度分布相同,他们并不一定同构,例如下图,两者的二度点的度分布均为

,三度点的度分布均为

,但显然两张图不同构。
聪明的你可能意识到了问题所在,上面的两张图中存在很多度分布完全相同的点,这大大削弱了两张图距离-度分布相同的性质,现在菜菜的小 W 有一个猜想:若两张图 G,H 满足

且对于 G 中的任意两个节点 u,v 满足

,H 中的任意两个节点 u,v 满足

,那么 G,H 是同构的。
强强的小 X 一眼就看出了这个猜想是错误的,你想对于每一个 n 找到图节点数是 n 的反例。但由于距离-度分布相同确实是一个很强的性质,对于一部分 n 可能并没有对应的反例,你只需要报告无解即可。
输入描述:
一行一个整数
。
输出描述:
第一行一个字符串 YES 或 NO,表示是否存在对应的反例。
若存在,第一行输出 YES,剩下的输出分成两部分,分别表示你构造的图 G 和 H,对于任意一部分:第一行一个正整数 m 表示图的边数,然后 m 行每行两个整数 u,v 表示一条 u,v 之间的边。
因为图是简单图,容易发现
。
你需要保证 G,H 都是连通图,且 G,H 不同构,
,且 G,H 分别满足其中任意两个点 u,v
。
若不存在,输出一行 NO。
示例1
输出
复制
YES
4
1 2
2 3
1 3
1 4
4
1 3
2 3
1 4
2 4
备注:
注意样例只是为了方便你理解输入输出格式,样例输出是错误的。