#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cctype>
#include <cmath>
#include <algorithm>
#include <cassert>
#define rep(i, a, b) for (int i = (a), _ = (b); i <= _; ++ i)
#define per(i, a, b) for (int i = (a), _ = (b); i >= _; -- i)
#define For(i, a, b) for (int i = (a), _ = (b); i < _; ++ i)
#define ri rd<int>
#define rl rd<LL>
typedef long long LL;
using namespace std;
const int maxN = 207;
const int V = 200;
template<class T> inline T rd() {
bool f = 1; char c = getchar(); for (; !isdigit(c); c = getchar()) if (c == '-') f = 0;
T x = 0; for (; isdigit(c); c = getchar()) x = x * 10 + c - 48; return f ? x : -x;
}
LL n;
LL f[maxN], c[maxN][maxN];
int ans[maxN], tt;
inline LL limitplus(LL x, LL y) {
LL t = x + y;
return t <= n ? t : n+1;
}
void init() {
rep (i, 0, V) {
c[i][0] = 1;
rep (j, 1, i) c[i][j] = limitplus(c[i-1][j], c[i-1][j-1]);
}
rep (i, 2, V) {
f[i] = 0;
rep (j, 2, i) if (j % 2 == 0) {
f[i] = limitplus(f[i], c[i][j]);
}
}
}
int main() {
n = rl();
init();
int l = 1;
while (n) {
int len = 0;
rep (i, 2, V) if (f[i] <= n) len = i;
n -= f[len];
while (len--) ans[++tt] = l;
++l;
}
assert(tt <= 200);
printf("%d\n", tt);
rep (i, 1, tt) printf("%d%c", ans[i], " \n"[i == tt]);
return 0;
}