#include <bits/stdc++.h>
using namespace std;
int binarySearch(array<int, 2> ar[], int x, int s, int f) {
  int k = (s + f) / 2;
  if (f - s > 1) {
    if (ar[k][0] == x) return k;
    if (ar[k][0] < x) return binarySearch(ar, x, k, f);
    if (ar[k][0] > x) return binarySearch(ar, x, s, k);
  }
  if (x >= ar[f][0]) return f;
  return s;
}
bool isPrime(int n) {
  if (n == 2) return true;
  for (int i = 2; i < sqrt(n) + 2; i++) {
    if (n % i == 0) return false;
  }
  return true;
}
int main() {
  int n, k;
  cin >> k >> n;
  vector<int> v;
  v.push_back(n);
  while (n > 1) {
    if (n % 10 == 1) {
      n /= 10;
      v.push_back(n);
    } else if ((n % 10) % 2 == 0) {
      n /= 2;
      v.push_back(n);
    } else {
      break;
    }
  }
  int ind = -1;
  for (int i = v.size() - 1; i >= 0; i--) {
    if (v[i] == k) {
      ind = i;
      break;
    }
  }
  if (ind != -1) {
    cout << "YES" << endl;
    cout << ind + 1 << endl;
    for (int i = ind; i >= 0; i--) {
      cout << v[i] << " ";
    }
  } else {
    cout << "NO";
  }
  return 0;
}
