classBigInt { public: int len_; int arr_[LEN]; int &operator[](int idx) { return arr_[idx]; } BigInt(int x = 0) { memset(arr_, 0, sizeof(arr_)); for (len_ = 1; x; ++len_) { arr_[len_] = x % 10; x /= 10; } --len_; } voidflatten(int len) { len_ = len; for (int i = 1; i <= len_; ++i) { if (arr_[i] >= 10) { arr_[i + 1] += arr_[i] / 10; arr_[i] %= 10; } } while (!arr_[len_]) --len_; } voidprint() { for (int i = 500, cnt = 1; i >= 1; --i, ++cnt) { cout << arr_[i]; if (cnt == 50) { cnt = 0; cout << endl; } } } };
BigInt operator*(BigInt a, BigInt b) { BigInt c; for (int i = 1; i <= a.len_; ++i) { for (int j = 1; j <= b.len_; ++j) { if (i + j - 1 > 500) continue; c[i + j - 1] += a[i] * b[j]; } } c.flatten(min(500, a.len_ + b.len_)); return c; }
BigInt operator*(BigInt a, int b) { BigInt c; int len = a.len_; for (int i = 1; i <= len; ++i) { c[i] += a[i] * b; } c.flatten(min(500, len + 11)); return c; }
intmain() { int n, p; cin >> p; n = p; BigInt a(2), b(1); while (p) { if (p & 1) b = b * a; a = a * a; p >>= 1; } cout << (int)(n * log10(2)) + 1 << endl; --b[1]; b.print(); return0; }