func_code_string: #include <bits/stdc++.h>   using namespace std;   struct Node {     int num, cnt;     friend bool operator<(const Node &n1, const Node &n2) {       if (n1.cnt != n2.cnt)         return n1.cnt < n2.cnt;       else         return n1.num < n2.num;     }   };   set<Node> cur, tmp;   vector<int> xx, num;   map<int, int> mp;   int main() {     int n, x;     scanf( %d%d , &n, &x);     if (x == 0 && n == 2) {       puts( NO );       return 0;     }     while (x > 0) {       xx.push_back(x % 2);       x /= 2;     }     int sz = xx.size();     int pre = 0;     cur.insert({0, n});     int idx = 0;     while (true) {       int need;       if (idx < sz) {         need = xx[idx];       } else         need = 0;       tmp.clear();       int tar = need, now = 0;       for (auto o : cur) {         int zc = o.num * 2, cc = o.cnt;         if (cc / 2 > 0) tmp.insert({zc + 1, cc / 2});         if ((cc + 1) / 2 > 0) tmp.insert({zc, (cc + 1) / 2});         now ^= ((cc / 2) % 2);       }       if (tar != now) {         for (auto o : cur) {           int zc = o.num * 2, cc = o.cnt;           if (cc == 1) {             tmp.erase({zc, (cc + 1) / 2});             tmp.insert({zc + 1, cc / 2 + 1});           } else {             tmp.erase({zc, (cc + 1) / 2});             tmp.erase({zc + 1, cc / 2});             if ((cc + 1) / 2 > 1) tmp.insert({zc, (cc + 1) / 2 - 1});             tmp.insert({zc + 1, cc / 2 + 1});           }           break;         }       }       cur.clear();       for (auto o : tmp) {         cur.insert(o);       }       idx++;       int siz = cur.size();       if (siz == n && idx >= sz) break;     }     vector<int> ans;     bool ok = true;     for (auto o : cur) {       int t = o.num, res = 0;       for (int i = 1; i <= idx; i++) {         int now = t % 2;         res = res * 2 + now;         t /= 2;       }       ans.push_back(res);       if (res > 1000000) {         ok = false;         break;       }     }     if (!ok) {       puts( NO );     } else {       int ord = 0;       puts( YES );       for (auto o : ans) {         if (ord != 0) putchar(   );         printf( %d , o);         ord++;       }       puts(  );     }     return 0;   }   