#include <stdio.h>
#include <stdint.h>
// Idea:
//
// For any positive integer N, the number of decimal digits D is
// D = floor(log10(N)) + 1
//
// For 2^1000, log10(2^1000) = 1000 * log10 (2) = 1000 * (ln 2 / ln 10) ~= 301.0299xxxx
#define K (1000)
void Solve()
{
// allocate enough space.
uint8_t digits[350] = { 0 };
// 2^0 = 1
digits[0] = 1;
// current `digits` length is 1.
uint64_t length = 1;
for (uint64_t i = 1; i <= K; i++)
{
uint8_t carry = 0;
for (uint64_t i = 0; i < length; i++)
{
uint8_t value = digits[i] * 2 + carry;
digits[i] = (value % 10);
carry = (value / 10);
}
if (carry)
{
digits[length++] = carry;
}
}
uint64_t sum = 0;
for (uint64_t i = 0; i < length; i++)
{
sum += digits[i];
}
fprintf(stdout, "%lu\n", sum);
}
int main()
{
Solve();
return 0;
}