Mahmoud and Ehab are on the third stage of their adventures now. As you know, Dr. Evil likes sets. This time he won't show them any set from his large collection, but will ask them to create a new set to replenish his beautiful collection of sets.
Dr. Evil has his favorite evil integer x. He asks Mahmoud and Ehab to find a set of n distinct non-negative integers such the bitwise-xor sum of the integers in it is exactly x. Dr. Evil doesn't like big numbers, so any number in the set shouldn't be greater than 106.
The only line contains two integers n and x (1 ≤ n ≤ 105, 0 ≤ x ≤ 105) — the number of elements in the set and the desired bitwise-xor, respectively.
If there is no such set, print "NO" (without quotes).
Otherwise, on the first line print "YES" (without quotes) and on the second line print n distinct integers, denoting the elements in the set is any order. If there are multiple solutions you can print any of them.
5 5
YES 1 2 4 5 7
3 6
YES 1 2 5
You can read more about the bitwise-xor operation here: https://en.wikipedia.org/wiki/Bitwise_operation#XOR
For the first sample .
For the second sample .
#include<iostream>
#include<deque>
#include<memory.h>
#include<stdio.h>
#include<map>
#include<string.h>
#include<algorithm>
#include<vector>
#include<math.h>
#include<stack>
#include<queue>
#include<set>
using namespace std;
int main()
{
int x,n;
cin>>n>>x;
//n=1,2都是特殊情况,要特殊考虑
if(n==1)
cout<<"YES\n"<<x<<endl;
if(n==2){
if(x==0)
cout<<"NO\n";
else
cout<<"YES\n0 "<<x<<endl;
}
int temp=0;//存前i个数的异或和
int aaa=(1<<17);
int bbb=(1<<18);
if(n>2){
cout<<"YES\n";
//留3个数做最后的特殊处理,前i个数可以随便选,这里直接用0到n-3,但是你要记录前i个数的异或和。
for(int i=1;i<=n-3;i++){
cout<<i<<" ";
temp^=i;//记录异或和
}
//最后把剩下的三个数,特殊输出。
//aaa,bbb,aaa^bbb会抵消掉,然后前i个数的异或和会和temp抵消掉,最后剩下x
cout<<aaa<<" "<<bbb<<" "<<(aaa^bbb^temp^x)<<endl;
}
return 0;
}