#include using namespace std; typedef long long ll; #define F first #define S second #define pii pair #define eb emplace_back #define all(v) v.begin(), v.end() #define rep(i, n) for (int i = 0; i < n; ++i) #define rep3(i, l, n) for (int i = l; i < n; ++i) #define chmax(a, b) a = max(a, b) #define chmin(a, b) a = min(a, b) #define out(a) cout << a << endl #define outa(a, n) rep(_, n) cout << a[_] << " "; cout << endl #define SZ(v) (int)v.size() #define inf (int)(1e9+7) const int MAX = 510000; const int MOD = 1000000007; long long fac[MAX], finv[MAX], inv[MAX]; // テーブルを作る前処理 void COMinit() { fac[0] = fac[1] = 1; finv[0] = finv[1] = 1; inv[1] = 1; for (int i = 2; i < MAX; i++){ fac[i] = fac[i - 1] * i % MOD; inv[i] = MOD - inv[MOD%i] * (MOD / i) % MOD; finv[i] = finv[i - 1] * inv[i] % MOD; } } // 二項係数計算 long long COM(int n, int k){ if (n < k) return 0; if (n < 0 || k < 0) return 0; return fac[n] * (finv[k] * finv[n - k] % MOD) % MOD; } int nibeki(int x) { int ret = 0; while (x % 2 == 0) { x /= 2; ret++; } if (x != 1) return -1; return ret; } int main() { COMinit(); int k; cin >> k; if (k == 0) { out(0); return 0; } rep3(i, 2, 100000) { int a = (int)COM(i, 2); if (k / a != (double)k / a) continue; int tmp = nibeki(k / a); if (tmp == -1) continue; //out(tmp); if (i + tmp > 30) continue; out(i + tmp); rep(j, i) { if (j) cout << " "; cout << 1; } rep(j, tmp) { cout << " "; cout << 0; } cout << endl; break; } } /* 1の組み合わせ 各々にどの0をいくつとるか sample2 5C2 = 10 2^3 = 8 */