#include <bits/stdc++.h>
using namespace std;
int digits_base_10(unsigned long long x)
{
if (x == 0)
{
return 1;
}
// 最上位ビットがnの最大値の時の桁数(0は一桁とする)
const int log10_table_by_bit[] = {1, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 9, 9, 9, 10, 10, 10, 10, 11, 11, 11, 12, 12, 12, 13, 13, 13, 13, 14, 14, 14, 15, 15, 15, 16, 16, 16, 16, 17, 17, 17, 18, 18, 18, 19, 19, 19, 19, 20};
// 10^n
const unsigned long long pow10s[] = {1, 10, 100, 1000, 10000, 100000, 1000000, 10000000, 100000000, 1000000000, 10000000000, 100000000000, 1000000000000, 10000000000000, 100000000000000, 1000000000000000, 10000000000000000, 100000000000000000, 1000000000000000000, 10000000000000000000ull};
int upper_digits = log10_table_by_bit[bit_width(x)];
return upper_digits - (x < pow10s[upper_digits - 1]);
};
#line 1 "Math/digits_base_10.hpp"
#include <bits/stdc++.h>
using namespace std;
int digits_base_10(unsigned long long x)
{
if (x == 0)
{
return 1;
}
// 最上位ビットがnの最大値の時の桁数(0は一桁とする)
const int log10_table_by_bit[] = {1, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 9, 9, 9, 10, 10, 10, 10, 11, 11, 11, 12, 12, 12, 13, 13, 13, 13, 14, 14, 14, 15, 15, 15, 16, 16, 16, 16, 17, 17, 17, 18, 18, 18, 19, 19, 19, 19, 20};
// 10^n
const unsigned long long pow10s[] = {1, 10, 100, 1000, 10000, 100000, 1000000, 10000000, 100000000, 1000000000, 10000000000, 100000000000, 1000000000000, 10000000000000, 100000000000000, 1000000000000000, 10000000000000000, 100000000000000000, 1000000000000000000, 10000000000000000000ull};
int upper_digits = log10_table_by_bit[bit_width(x)];
return upper_digits - (x < pow10s[upper_digits - 1]);
};