#include <bits/stdc++.h>
using namespace std;
const int MOD = 1e9 + 7;
const int MAX = 2147483647;
const int MIN = -2147483648;
const long long INF = 1e18;
mt19937 rng((uint32_t)chrono::steady_clock::now().time_since_epoch().count());
string to_string(char c) { return string(1, c); }
string to_string(bool b) { return b ? "0" : "1"; }
string to_string(const char* s) { return (string)s; }
string to_string(string s) { return s; }
template <class A, class B>
string to_string(pair<A, B> p) {
  return "(" + to_string(p.f) + ", " + to_string(p.s) + ")";
}
template <class T>
string to_string(T v) {
  bool fst = 1;
  string res = "{";
  for (const auto& x : v) {
    if (!fst) res += ", ";
    fst = 0;
    res += to_string(x);
  }
  res += "}";
  return res;
}
void DBG() { cerr << "]" << endl; }
template <class H, class... T>
void DBG(H h, T... t) {
  cerr << to_string(h);
  if (sizeof...(t)) cerr << ", ";
  DBG(t...);
}
const vector<vector<int>> dirs = {{0, 1}, {1, 0}, {-1, 0}, {0, -1}};
int sieve[1005];
void init_sieve() {
  memset(sieve, 0, sizeof(sieve));
  for (int i = (2); i < (1005); ++i) {
    int fact = i * i;
    while (fact < 1005) {
      sieve[fact] = true;
      fact += i;
    }
  }
}
vector<int> ans;
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  init_sieve();
  int t = 1;
  while (t--) {
    int n;
    cin >> n;
    int res = 0;
    for (int i = (2); i < (1005); ++i) {
      if (!sieve[i]) {
        int fact = i;
        while (fact <= n) {
          res++;
          ans.push_back(fact);
          fact *= i;
        }
      }
    }
    cout << res << '\n';
    for (int i = (0); i < ((int)ans.size()); ++i) {
      cout << ans[i] << ' ';
    }
    cout << '\n';
  }
  return 0;
}
