output_description: If there is no permutation that satisfies the conditions, print `NO`.
  
  If there is such a permutation, print `YES` in the first line. Then, print
  (P_0,\ P_1,\ ...\ P_{2^N-1}) in the second line, with spaces in between. If
  there are multiple solutions, any of them is accepted.
  
  * * *
input_description: Input is given from Standard Input in the following format:
  
      
      
      N A B
attempt: mod = 1000000007
  
  N = int(input())
  C = []
  for i in range(N):
      c = int(input())
      if i == 0 or C[-1] != c:
          C.append(c)
  cases = [1] * (len(C) + 1)
  indexes = dict()
  for i in range(1, 1 + len(C)):
      c = C[i - 1]
      if c not in indexes:
          cases[i] = cases[i - 1]
      else:
          cases[i] = (cases[i - 1] + cases[indexes[c]]) % mod
      indexes[c] = i
  print(cases[len(C)])
  
problem_description: Statement
  
  You are given integers N,\ A and B. Determine if there exists a permutation
  (P_0,\ P_1,\ ...\ P_{2^N-1}) of (0,\ 1,\ ...\ 2^N-1) that satisfies all of the
  following conditions, and create one such permutation if it exists.
  
    * P_0=A
    * P_{2^N-1}=B
    * For all 0 \leq i < 2^N-1, the binary representations of P_i and P_{i+1} differ by exactly one bit.
samples: [{"input": "2 1 3", "output": "YES\n    1 0 2 3\n    \n\nThe binary representation of P=(1,0,2,3) is (01,00,10,11), where any two\nadjacent elements differ by exactly one bit.\n\n* * *"}, {"input": "3 2 1", "output": "NO"}]