#include <bits/stdc++.h>
typedef long long ll;
#define FOR(i,a,b) for(int i=(a);i<(b);i++)
#define REP(i,a) FOR(i,0,a)

using namespace std;
const int MAX_N=17;
typedef vector<int> vec;
int N,A,B;
vec slv(int n,int a,int b){
	vec ret(1<<n);
	if(n==1){
		ret[0]=a;
		ret[1]=b;
	}else{
		int c=a^b;
		vec v,u;
		if(c<(1<<(n-1))){
			v=slv(n-1,0,c);
			u=slv(n-1,0,v[1]);
			for(auto &i:u){
				i|=1<<(n-1);
			}
			ret[0]=0;
			REP(i,1<<(n-1)){
				ret[i+1]=u[i];
			}
			REP(i,(1<<(n-1))-1){
				ret[(1<<(n-1))+1+i]=v[i+1];
			}
		}else{
			v=slv(n-1,0,1);
			u=slv(n-1,1,c-(1<<(n-1)));
			REP(i,1<<(n-1)){
				ret[i]=v[i];
			}
			REP(i,1<<(n-1)){
				ret[i+(1<<(n-1))]=u[i]+(1<<(n-1));
			}
		}
		REP(i,1<<n){
			ret[i]^=a;
		}
	}
	return ret;
}
			
int main(){
	scanf("%d %d %d",&N,&A,&B);
	int acnt,bcnt;
	acnt=bcnt=0;
	REP(i,N){
		if((A>>i)&1){
			acnt++;
		}
		if((B>>i)&1){
			bcnt++;
		}
	}
	if((bcnt-acnt)%2==0){
		puts("NO");
	}else{
		puts("YES");
		vec ans=slv(N,A,B);
		REP(i,1<<N){
			if(i)putchar(' ');
			printf("%d",ans[i]);
		}
		putchar('\n');
	}
}