#include <bits/stdc++.h>
using namespace std;
using ll = long long;
int mod = (ll)1e9 + 7;
const int INF = 1e9 + 1;
const int N = 5e5 + 10;
const double eps = 1e-3;
template <typename XPAX>
void ckma(XPAX &x, XPAX y) {
  x = (x < y ? y : x);
}
template <typename XPAX>
void ckmi(XPAX &x, XPAX y) {
  x = (x > y ? y : x);
}
ll power(ll a, ll b) {
  if (!b) return 1;
  ll c = power(a, b / 2);
  c = (1LL * c * c);
  if (b % 2) c = (1LL * c * a);
  return c;
}
int mul(int a, int b) { return a * 1ll * b % mod; }
int add(int a, int b) {
  int s = (a + b);
  if (s >= mod) s -= mod;
  return s;
}
template <long long mod = 1000000007>
struct modint {
  long long a;
  modint() : a(0) {}
  modint(long long t) {
    a = t % mod;
    if (a < 0) a += mod;
  }
  operator long long() const { return a; }
  bool operator==(const modint &x) const { return a == x.a; }
  bool operator!=(const modint &x) const { return a != x.a; }
  modint operator-() const { return modint(a ? (mod - a) : 0); }
  modint operator~() const { return pow(mod - 2); }
  modint operator+(const modint &x) const { return modint(*this) += x; }
  modint operator-(const modint &x) const { return modint(*this) -= x; }
  modint operator*(const modint &x) const { return modint(*this) *= x; }
  modint operator/(const modint &x) const { return modint(*this) /= x; }
  modint &operator+=(const modint &x) {
    a += x.a;
    if (a >= mod) a -= mod;
    return *this;
  }
  modint &operator-=(const modint &x) {
    a -= x.a;
    if (a < 0) a += mod;
    return *this;
  }
  modint &operator*=(const modint &x) {
    a = a * x.a % mod;
    return *this;
  }
  modint &operator/=(const modint &x) {
    a = a * (~x).a % mod;
    return *this;
  }
  friend ostream &operator<<(ostream &os, const modint &x) { return os << x.a; }
  friend istream &operator>>(istream &is, modint &x) {
    long long t;
    is >> t;
    x = modint(t);
    return is;
  }
  modint pow(long long x) const {
    modint ret = 1, tmp = a;
    for (; x; tmp *= tmp, x >>= 1) {
      if (x & 1) ret *= tmp;
    }
    return ret;
  }
};
const ll MOD = 1e9 + 7;
using Mint = modint<MOD>;
struct FenwickTree {
  vector<int> bit;
  int n;
  FenwickTree(int n) {
    this->n = n;
    bit.assign(n, 0);
  }
  FenwickTree(vector<int> a) : FenwickTree(a.size()) {
    for (size_t i = 0; i < a.size(); i++) add(i, a[i]);
  }
  int sum(int r) {
    int ret = 0;
    for (; r >= 0; r = (r & (r + 1)) - 1) ret += bit[r];
    return ret;
  }
  int sum(int l, int r) { return sum(r) - sum(l - 1); }
  void add(int idx, int delta) {
    for (; idx < n; idx = idx | (idx + 1)) bit[idx] += delta;
  }
};
template <class T>
struct Combination {
  vector<T> fact, factinv;
  Combination(int n) : fact(n + 1), factinv(n + 1) {
    fact[0] = 1;
    for (int i = 1; i <= n; i++) fact[i] = fact[i - 1] * T(i);
    factinv[n] = ~fact[n];
    for (int i = n; i >= 1; i--) factinv[i - 1] = factinv[i] * T(i);
  }
  T nCr(int n, int r) {
    if (n < 0 || r < 0 || n < r) return 0;
    return fact[n] * factinv[r] * factinv[n - r];
  }
  T factorial(int x) {
    if (x < 0) return 0;
    return fact[x];
  }
};
void done() {
  auto ck = [&](int x) {
    bool f = 0;
    for (int bit = 30; bit >= 0; --bit) {
      if (x >> bit & 1) {
        f = 1;
      } else if (f) {
        return 0;
      }
    }
    return 1;
  };
  auto first_zero = [&](int x) {
    bool f = 0;
    for (int bit = 30; bit >= 0; --bit) {
      if (x >> bit & 1) {
        f = 1;
      } else if (f) {
        return bit;
      }
    }
    return -1;
  };
  int n;
  cin >> n;
  int ans = 0;
  vector<int> p;
  int st = 1;
  while (!ck(n)) {
    if (st) {
      int f = first_zero(n);
      assert(f != -1);
      p.push_back(f + 1);
      n ^= (1 << f + 1) - 1;
    } else {
      ++n;
    }
    ++ans;
    st ^= 1;
  }
  assert(ck(n));
  assert(ans < 41);
  cout << ans << '\n';
  for (auto c : p) cout << c << ' ';
}
void solve() {}
void emer() {}
void another() {}
void test_case() {
  int t;
  cin >> t;
  for (int p = 0; p < (t); ++p) {
    done();
  }
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(nullptr);
  cout.tie(nullptr);
  done();
}
