#include <iostream>
using std::cout;
using std::endl;

/*

place your code here

*/

struct test_values
{
	uint64_t user_value;
	uint64_t org_value;
};

static const int case_count = 144;

static const test_values data[] =
{
	{ digits_in_base_for_type<signed char, 2ULL>::value, 7},
	{ digits_in_base_for_type<signed char, 3ULL>::value, 5},
	{ digits_in_base_for_type<signed char, 5ULL>::value, 4},
	{ digits_in_base_for_type<signed char, 7ULL>::value, 3},
	{ digits_in_base_for_type<signed char, 8ULL>::value, 3},
	{ digits_in_base_for_type<signed char, 10ULL>::value, 3},
	{ digits_in_base_for_type<signed char, 13ULL>::value, 2},
	{ digits_in_base_for_type<signed char, 16ULL>::value, 2},
	{ digits_in_base_for_type<signed char, 9ULL>::value, 3},
	{ digits_in_base_for_type<signed char, 57ULL>::value, 2},
	{ digits_in_base_for_type<signed char, 100ULL>::value, 2},
	{ digits_in_base_for_type<signed char, 89ULL>::value, 2},
	{ digits_in_base_for_type<signed char, 17ULL>::value, 2},
	{ digits_in_base_for_type<signed char, 68ULL>::value, 2},
	{ digits_in_base_for_type<signed char, 41ULL>::value, 2},
	{ digits_in_base_for_type<signed char, 36ULL>::value, 2},
	{ digits_in_base_for_type<signed char, 121ULL>::value, 2},
	{ digits_in_base_for_type<signed char, 128ULL>::value, 1},
	{ digits_in_base_for_type<unsigned char, 2ULL>::value, 8},
	{ digits_in_base_for_type<unsigned char, 3ULL>::value, 6},
	{ digits_in_base_for_type<unsigned char, 5ULL>::value, 4},
	{ digits_in_base_for_type<unsigned char, 7ULL>::value, 3},
	{ digits_in_base_for_type<unsigned char, 8ULL>::value, 3},
	{ digits_in_base_for_type<unsigned char, 10ULL>::value, 3},
	{ digits_in_base_for_type<unsigned char, 13ULL>::value, 3},
	{ digits_in_base_for_type<unsigned char, 16ULL>::value, 2},
	{ digits_in_base_for_type<unsigned char, 32ULL>::value, 2},
	{ digits_in_base_for_type<unsigned char, 226ULL>::value, 2},
	{ digits_in_base_for_type<unsigned char, 194ULL>::value, 2},
	{ digits_in_base_for_type<unsigned char, 72ULL>::value, 2},
	{ digits_in_base_for_type<unsigned char, 128ULL>::value, 2},
	{ digits_in_base_for_type<unsigned char, 82ULL>::value, 2},
	{ digits_in_base_for_type<unsigned char, 136ULL>::value, 2},
	{ digits_in_base_for_type<unsigned char, 34ULL>::value, 2},
	{ digits_in_base_for_type<unsigned char, 178ULL>::value, 2},
	{ digits_in_base_for_type<unsigned char, 256ULL>::value, 1},
	{ digits_in_base_for_type<signed short int, 2ULL>::value, 15},
	{ digits_in_base_for_type<signed short int, 3ULL>::value, 10},
	{ digits_in_base_for_type<signed short int, 5ULL>::value, 7},
	{ digits_in_base_for_type<signed short int, 7ULL>::value, 6},
	{ digits_in_base_for_type<signed short int, 8ULL>::value, 5},
	{ digits_in_base_for_type<signed short int, 10ULL>::value, 5},
	{ digits_in_base_for_type<signed short int, 13ULL>::value, 5},
	{ digits_in_base_for_type<signed short int, 16ULL>::value, 4},
	{ digits_in_base_for_type<signed short int, 21604ULL>::value, 2},
	{ digits_in_base_for_type<signed short int, 11809ULL>::value, 2},
	{ digits_in_base_for_type<signed short int, 26176ULL>::value, 2},
	{ digits_in_base_for_type<signed short int, 25225ULL>::value, 2},
	{ digits_in_base_for_type<signed short int, 11908ULL>::value, 2},
	{ digits_in_base_for_type<signed short int, 12352ULL>::value, 2},
	{ digits_in_base_for_type<signed short int, 20736ULL>::value, 2},
	{ digits_in_base_for_type<signed short int, 3897ULL>::value, 2},
	{ digits_in_base_for_type<signed short int, 1433ULL>::value, 2},
	{ digits_in_base_for_type<signed short int, 32768ULL>::value, 1},
	{ digits_in_base_for_type<unsigned short int, 2ULL>::value, 16},
	{ digits_in_base_for_type<unsigned short int, 3ULL>::value, 11},
	{ digits_in_base_for_type<unsigned short int, 5ULL>::value, 7},
	{ digits_in_base_for_type<unsigned short int, 7ULL>::value, 6},
	{ digits_in_base_for_type<unsigned short int, 8ULL>::value, 6},
	{ digits_in_base_for_type<unsigned short int, 10ULL>::value, 5},
	{ digits_in_base_for_type<unsigned short int, 13ULL>::value, 5},
	{ digits_in_base_for_type<unsigned short int, 16ULL>::value, 4},
	{ digits_in_base_for_type<unsigned short int, 51200ULL>::value, 2},
	{ digits_in_base_for_type<unsigned short int, 41088ULL>::value, 2},
	{ digits_in_base_for_type<unsigned short int, 30344ULL>::value, 2},
	{ digits_in_base_for_type<unsigned short int, 6098ULL>::value, 2},
	{ digits_in_base_for_type<unsigned short int, 22656ULL>::value, 2},
	{ digits_in_base_for_type<unsigned short int, 10312ULL>::value, 2},
	{ digits_in_base_for_type<unsigned short int, 19826ULL>::value, 2},
	{ digits_in_base_for_type<unsigned short int, 4608ULL>::value, 2},
	{ digits_in_base_for_type<unsigned short int, 63842ULL>::value, 2},
	{ digits_in_base_for_type<unsigned short int, 65536ULL>::value, 1},
	{ digits_in_base_for_type<signed int, 2ULL>::value, 31},
	{ digits_in_base_for_type<signed int, 3ULL>::value, 20},
	{ digits_in_base_for_type<signed int, 5ULL>::value, 14},
	{ digits_in_base_for_type<signed int, 7ULL>::value, 12},
	{ digits_in_base_for_type<signed int, 8ULL>::value, 11},
	{ digits_in_base_for_type<signed int, 10ULL>::value, 10},
	{ digits_in_base_for_type<signed int, 13ULL>::value, 9},
	{ digits_in_base_for_type<signed int, 16ULL>::value, 8},
	{ digits_in_base_for_type<signed int, 210076036ULL>::value, 2},
	{ digits_in_base_for_type<signed int, 213014025ULL>::value, 2},
	{ digits_in_base_for_type<signed int, 215972416ULL>::value, 2},
	{ digits_in_base_for_type<signed int, 219069601ULL>::value, 2},
	{ digits_in_base_for_type<signed int, 222069604ULL>::value, 2},
	{ digits_in_base_for_type<signed int, 225210049ULL>::value, 2},
	{ digits_in_base_for_type<signed int, 228251664ULL>::value, 2},
	{ digits_in_base_for_type<signed int, 231404944ULL>::value, 2},
	{ digits_in_base_for_type<signed int, 234518596ULL>::value, 2},
	{ digits_in_base_for_type<signed int, 2147483648ULL>::value, 1},
	{ digits_in_base_for_type<unsigned int, 2ULL>::value, 32},
	{ digits_in_base_for_type<unsigned int, 3ULL>::value, 21},
	{ digits_in_base_for_type<unsigned int, 5ULL>::value, 14},
	{ digits_in_base_for_type<unsigned int, 7ULL>::value, 12},
	{ digits_in_base_for_type<unsigned int, 8ULL>::value, 11},
	{ digits_in_base_for_type<unsigned int, 10ULL>::value, 10},
	{ digits_in_base_for_type<unsigned int, 13ULL>::value, 9},
	{ digits_in_base_for_type<unsigned int, 16ULL>::value, 8},
	{ digits_in_base_for_type<unsigned int, 475244450ULL>::value, 2},
	{ digits_in_base_for_type<unsigned int, 481492512ULL>::value, 2},
	{ digits_in_base_for_type<unsigned int, 488031282ULL>::value, 2},
	{ digits_in_base_for_type<unsigned int, 494362568ULL>::value, 2},
	{ digits_in_base_for_type<unsigned int, 500734658ULL>::value, 2},
	{ digits_in_base_for_type<unsigned int, 507147552ULL>::value, 2},
	{ digits_in_base_for_type<unsigned int, 513857682ULL>::value, 2},
	{ digits_in_base_for_type<unsigned int, 520353800ULL>::value, 2},
	{ digits_in_base_for_type<unsigned int, 526890722ULL>::value, 2},
	{ digits_in_base_for_type<unsigned int, 4294967296ULL>::value, 1},
	{ digits_in_base_for_type<signed long long int, 2ULL>::value, 63},
	{ digits_in_base_for_type<signed long long int, 3ULL>::value, 40},
	{ digits_in_base_for_type<signed long long int, 5ULL>::value, 28},
	{ digits_in_base_for_type<signed long long int, 7ULL>::value, 23},
	{ digits_in_base_for_type<signed long long int, 8ULL>::value, 21},
	{ digits_in_base_for_type<signed long long int, 10ULL>::value, 19},
	{ digits_in_base_for_type<signed long long int, 13ULL>::value, 18},
	{ digits_in_base_for_type<signed long long int, 16ULL>::value, 16},
	{ digits_in_base_for_type<signed long long int, 2306124493047073424ULL>::value, 2},
	{ digits_in_base_for_type<signed long long int, 2334642826787851001ULL>::value, 2},
	{ digits_in_base_for_type<signed long long int, 2363336412374064292ULL>::value, 2},
	{ digits_in_base_for_type<signed long long int, 2393352177872567809ULL>::value, 2},
	{ digits_in_base_for_type<signed long long int, 2422403207817097689ULL>::value, 2},
	{ digits_in_base_for_type<signed long long int, 2451629489607261737ULL>::value, 2},
	{ digits_in_base_for_type<signed long long int, 2481031023242891716ULL>::value, 2},
	{ digits_in_base_for_type<signed long long int, 2511782774337354304ULL>::value, 2},
	{ digits_in_base_for_type<signed long long int, 2541541752331267593ULL>::value, 2},
	{ digits_in_base_for_type<signed long long int, 9223372036854775808ULL>::value, 1},
	{ digits_in_base_for_type<unsigned long long int, 2ULL>::value, 64},
	{ digits_in_base_for_type<unsigned long long int, 3ULL>::value, 41},
	{ digits_in_base_for_type<unsigned long long int, 5ULL>::value, 28},
	{ digits_in_base_for_type<unsigned long long int, 7ULL>::value, 23},
	{ digits_in_base_for_type<unsigned long long int, 8ULL>::value, 22},
	{ digits_in_base_for_type<unsigned long long int, 10ULL>::value, 20},
	{ digits_in_base_for_type<unsigned long long int, 13ULL>::value, 18},
	{ digits_in_base_for_type<unsigned long long int, 16ULL>::value, 16},
	{ digits_in_base_for_type<unsigned long long int, 5142951964341701554ULL>::value, 2},
	{ digits_in_base_for_type<unsigned long long int, 5203768907418551794ULL>::value, 2},
	{ digits_in_base_for_type<unsigned long long int, 5266146401092571648ULL>::value, 2},
	{ digits_in_base_for_type<unsigned long long int, 5327080253179231602ULL>::value, 2},
	{ digits_in_base_for_type<unsigned long long int, 5388973137103673352ULL>::value, 2},
	{ digits_in_base_for_type<unsigned long long int, 5450611466906175634ULL>::value, 2},
	{ digits_in_base_for_type<unsigned long long int, 5514446912998791296ULL>::value, 2},
	{ digits_in_base_for_type<unsigned long long int, 5576796661184284626ULL>::value, 2},
	{ digits_in_base_for_type<unsigned long long int, 5640119459980820424ULL>::value, 2},
	{ digits_in_base_for_type<unsigned long long int, 18446744073709551615ULL>::value, 2}
};

int main()
{
	for (int i=0; i<case_count; ++i)
	{
		if (data[i].user_value != data[i].org_value)
		{
			cout << "case " << i + 1 << " failed.\n";
			return 1;
		}
	}
	cout << "all test passed.\n";
}
