题目描述
namespace_std这天打开了一本古老的算法书,上面描述了一个经典的 NP问题:
给定一个集合,其元素为{a[1],a[2],...,a[n]},其中a[1]+a[2]+...+a[n]为偶数,你需要找到一组c[1],c[2],...,c[n]∈{−1,1}
,使得Σa[i]c[i]=0。
namespace_std发现这是一个很困难的问题,因此他想加一些限制。他限制{a[1],a[2],...,a[n]}是{1,2,...,m}
的一个子集。
他发现这还是一个很困难的问题,因此他又限制[2m/3]<n<=m。
这个问题还是很困难,但他作为一名混乱邪恶的出题人,已经不想再弱化这个问题了……
因此,这个问题就交给你了。
你需要判断这个问题是否有解,如果有解则还要输出一组合法的c[i]。
输入格式
第一行输入两个正整数n,m。
第二行输入n个正整数a[1],a[2],...,a[n]。
保证{a[1],a[2],...,a[n]}是{1,2,...,m}的一个子集,a[1]+a[2]+...+a[n]为偶数,且[2m/3]<n<=m。
输出格式
如果问题有解,请输出一行 "NP−Hardsolved",并在接下来一行输出n个1或−1,表示你找到的解中的c[i]
。如果有多种可行的c[i],你只需要输出任意一种。
否则只需要输出一行 "Chaoticevil"。
样例
输入样例
6 8
1 6 2 5 4 8
输出样例
NP-Hard solved
1 -1 -1 -1 1 1
提示
样例解释
1−6−2−5+4+8=0,因此c={1,−1,−1,−1,1,1}是一组合法的方案。
同理,c={−1,1,1,1,−1,−1}也是一组合法的方案。
数据范围
对于 12%的数据,m<=20。
对于 28%的数据,m<=300。
对于 44%的数据,m<=1000。
对于 56%的数据,m<=105。
另有 8%的数据,m=n。
另有 16%的数据,保证n<=m−5。
对于 100%的数据,3<=n<=m<=106,保证{a[1],a[2],...,a[n]}是{1,2,...,m}的一个子集,
{a[1],a[2],...,a[n]}为偶数,且[2m/3]<n<=m。