import scala.collection.mutable
import scala.collection.mutable.ArrayBuffer

object Main {

  val amari = 1000000007

  def main(args: Array[String]): Unit = {
    val sc = new java.util.Scanner(System.in)
    val N, A, B = sc.nextInt()
    val xor = A^B
    val xs = Stream.from(0).map(x => Math.pow(2, x).toInt).takeWhile(_ <= Math.max(A, B)).reverse
    val ys = xs.reverse
    val s = xs.map {
      x =>
        (xor / x) % 2
    }.sum
    if ((s % 2) == 1) {
      println("YES")
      val map = new mutable.HashMap[Int, Boolean]
      var cnt = 1
      var cnt2 = 0
      for {
        i <- 0 until Math.pow(2, N).toInt
      } {
        map(i) = false
      }
      var s = A
      var e = B
      map(s) = true
      map(e) = true
      val max = Math.pow(2, N).toInt - 1
      val arr = ArrayBuffer.fill(max+1)(0)
      arr(0) = s
      arr(max - cnt2) = e
      while (s != 0) {
        s = xs.find(x => s - x >= 0).map(x => s - x).get
        map(s) = true
        arr(cnt) = s
        cnt = cnt + 1
      }
      while (e != max) {
        cnt = cnt + 1
        e = xs.find(x => s + x <= max).map(x => s + x).get
        map(e) = true
        arr(max - cnt2) = e
        cnt2 = cnt2 -1
      }
      map(e) = false
      while (cnt < Math.pow(2, N)) {
        s = ys.find(x => !map(s + x)).map(x => s + x).get
        map(s) = true
        arr(cnt - cnt2) = s
        cnt = cnt + 1
      }
      println(arr.mkString(" "))
    } else {
      println("NO")
    }
  }
}
