E 图同构
题号:NC223200
时间限制:C/C++/Rust/Pascal 1秒,其他语言2秒
空间限制:C/C++/Rust/Pascal 512 M,其他语言1024 M
Special Judge, 64bit IO Format: %lld

题目描述

定义两张无向简单图 G,H 是同构的,当且仅当两者的点集 V_G,V_H 大小相同,且存在一个双射 ,满足若 G 中存在一条边 uv,则 H 中存在一条边

虽然图同构判定目前没有多项式复杂度算法,但图同构具有优美的性质,比如两张图顶点度数组成的可重集相同。

对于一张无向联通简单图 G 中的一个顶点 u,定义顶点 u 的度数 为 G 中以 u 为一个顶点的边数。考虑可重集 ,其中 表示图 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

输入

复制
4

输出

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

备注:

注意样例只是为了方便你理解输入输出格式,样例输出是错误的。