#include <bits/stdc++.h>
using namespace std;
long long MAX = 1e9 + 7;
int flag = 0;
void print(long long *path, int ct) {
  cout << "YES\n" << ct + 1 << "\n";
  for (int i = 0; i <= ct; i++) cout << path[i] << " ";
}
void see(long long a, long long b, long long *path, int ct) {
  long long left = 2 * a, right = 10 * a + 1;
  if (left > b && right > b) return;
  if (left == b && flag == 0) {
    path[ct] = left;
    print(path, ct);
    flag = 1;
    return;
  }
  if (right == b && flag == 0) {
    path[ct] = right;
    print(path, ct);
    flag = 1;
    return;
  }
  if (left < b && flag == 0) {
    path[ct] = left;
    see(left, b, path, ct + 1);
  }
  if (right < b && flag == 0) {
    path[ct] = right;
    see(right, b, path, ct + 1);
  }
}
int main() {
  std::ios::sync_with_stdio(false), cin.tie(NULL), cout.tie(NULL);
  long long a, b;
  cin >> a >> b;
  if (b < a) cout << "NO";
  long long path[10000];
  memset(path, 0, sizeof(path));
  path[0] = a;
  see(a, b, path, 1);
  if (flag == 0) cout << "NO";
  return 0;
}
