func_code_string: #include <bits/stdc++.h>   using namespace std;   const double pi = acos(-1.0);   const double eps = 1e-11;   template <class T>   inline void checkmin(T& a, T b) {     if (b < a) a = b;   }   template <class T>   inline void checkmax(T& a, T b) {     if (b > a) a = b;   }   template <class T>   inline T sqr(T x) {     return x * x;   }   template <class T>   inline T lsb(T n) {     return (n & (-n));   }   template <class T>   inline int countbit(T n) {     return (n == 0) ? 0 : (1 + countbit(n & (n - 1)));   }   template <class T>   inline T gcd(T a, T b) {     if (a < 0) return gcd(-a, b);     if (b < 0) return gcd(a, -b);     return (b == 0) ? a : gcd(b, a % b);   }   bool isequal(vector<int> a, vector<int> b) {     for (int i = 0; i < (a.size()); i++)       if (a[i] != b[i]) return false;     return true;   }   template <class T>   bool allequal(vector<T> a) {     sort(a.begin(), a.end());     return a[0] == a[a.size() - 1];   }   template <class T>   void printarray(vector<T> a) {     for (int i = 0; i < (a.size()); i++) cout << a[i] <<    ;     cout << endl;   }   template <class T>   void printsubarray(vector<T> a, int start, int end) {     if (start < 0 or end > a.size() - 1) cout <<  Out of bounds  << endl;     for (int i = start; i <= end; i++) cout << a[i] <<    ;     cout << endl;   }   bool isprime(int n) {     if (n < 2) return false;     if (n == 2) return true;     for (int i = 2; i * i <= n; i++) {       if (n % i == 0) return false;     }     return true;   }   void split(const string& s, char c, vector<string>& result) {     stringstream ss(s);     string x;     while (getline(ss, x, c)) result.push_back(x);   }   void err(vector<string>::iterator it) {}   template <typename T, typename... Args>   void err(vector<string>::iterator it, T a, Args... args) {     cerr << it->substr((*it)[0] ==    , it->length()) <<   =   << a <<   n ;     err(++it, args...);   }   void readarray(vector<int>& a, int size) {     int tmp;     a.clear();     for (int i = 0; i < (size); i++) {       cin >> tmp;       a.push_back(tmp);     }   }   bool invalid(int n, int k) {     int nbits = countbit(n);     if (k < nbits or k > n) return true;     return false;   }   vector<int> res;   void split(int n, int k) {     if (k == 1) {       res.push_back(n);     } else {       int nbits = countbit(n);       if (nbits == 1) {         split(n >> 1, ((k >> 1) + k % 2));         split(n >> 1, (k >> 1));       } else {         int a, b;         int msb = (int)log2(n);         a = (1 << msb);         b = n ^ a;         int excess = k - nbits + 1;         int first = min(excess, a);         {           vector<string> _v;           split( a, b, excess, nbits, k, first ,  , , _v);           err(_v.begin(), a, b, excess, nbits, k, first);         };         split(a, first);         split(b, k - first);       }     }   }   void solvecase() {     int n, k;     cin >> n >> k;     if (invalid(n, k)) {       cout <<  NO  << endl;       return;     }     split(n, k);     cout <<  YES  << endl;     printarray(res);   }   int main() {     int cases = 1;     while (cases--) {       solvecase();     }     return 0;   }   