#include <bits/stdc++.h>
using namespace std;
long long int spf[1000001];
void sieve1() {
  spf[1] = 1;
  for (int i = 2; i < 1000001; i++) spf[i] = i;
  for (int i = 4; i < 1000001; i += 2) spf[i] = 2;
  for (int i = 3; i * i < 1000001; i++) {
    if (spf[i] == i) {
      for (int j = i * i; j < 1000001; j += i)
        if (spf[j] == j) spf[j] = i;
    }
  }
}
long long int getFactorization(int x) {
  vector<int> ret;
  long long int p = 0;
  while (x != 1) {
    ret.push_back(spf[x]);
    x = x / spf[x];
  }
  sort(ret.begin(), ret.end());
  for (int i = 0; i < ret.size() - 1; i++) {
    if (ret[i] != ret[i + 1]) p = p + ret[i];
  }
  p = p + ret[ret.size() - 1];
  return p;
}
long long int d[1000055], u = 0;
void Sieve(int n) {
  bool prime[n + 1];
  memset(prime, true, sizeof(prime));
  for (int p = 2; p * p <= n; p++) {
    if (prime[p] == true) {
      for (int i = p * 2; i <= n; i += p) prime[i] = false;
    }
  }
  for (int p = 2; p <= n; p++)
    if (prime[p]) {
      d[u] = p;
      u++;
    }
}
long long int minverse(long long int x, long long int n, long long int M) {
  if (n == 0)
    return 1;
  else if (n % 2 == 0)
    return minverse((x * x) % M, n / 2, M);
  else
    return (x * minverse((x * x) % M, (n - 1) / 2, M)) % M;
}
long long int prime(long long int n) {
  long long int i;
  if (n == 1 || n == 0) return 0;
  for (i = 2; i < sqrt(n); i++) {
    if (n % i == 0) return 0;
  }
  return 1;
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  map<long long int, long long int> mp;
  long long int a[30], i;
  for (i = 1; i <= 30; i++) {
    a[i - 1] = pow(2, i) - 1;
    mp[a[i - 1]] = 1;
  }
  long long int x;
  cin >> x;
  long long int c = 0;
  vector<long long int> v;
  while (1) {
    if (mp[x] == 1) break;
    if (c % 2 == 0) {
      long long int p = x;
      long long int u = 0, u1, j = 0;
      while (p > 0) {
        j++;
        if (p % 2 == 0) u = j;
        p /= 2;
      }
      u1 = pow(2, u) - 1;
      x ^= u1;
      v.push_back(u);
    } else
      x++;
    c++;
  }
  if (c == 0)
    cout << 0 << endl;
  else {
    cout << c << endl;
    for (i = 0; i < v.size(); i++) cout << v[i] << " ";
    cout << endl;
  }
  return 0;
}
