#include <stdlib.h>
#include <stdio.h>
int** N;
void prepare()
{
int i;
for (i = 1; i <= 8; i++)
{
int length = i * 9 + 1;
N
[i
] = malloc(length
* sizeof(int));
if (i == 1)
{
int j;
for (j = 0; j < length; j++)
N[i][j] = 1;
}
else
{
int runningsum = 0;
int k = 0;
for ( ; k <= length / 2; k++)
{
runningsum += N[i-1][k];
if (k >= 10)
runningsum -= N[i-1][k-10];
N[i][k] = runningsum;
}
for ( ; k < length; k++)
{
N[i][k] = N[i][length - 1 - k];
}
}
}
}
static unsigned long long l_t(size_t digits)
{
unsigned long long tickets = 0;
size_t i = 0;
for( ; i <= (digits*9); i++ )
{
unsigned long long n = N[digits][i];
tickets += n*n;
}
return tickets;
}
int main()
{
prepare();
(
"1: %llu\n2: %llu\n3: %llu\n4: %llu\n5: %llu\n6: %llu\n7: %llu\n8: %llu\n",
l_t(1),l_t(2),l_t(3),l_t(4),l_t(5),l_t(6),l_t(7),l_t(8)
);
return 0;
}
I2luY2x1ZGUgPHN0ZGxpYi5oPgojaW5jbHVkZSA8c3RkaW8uaD4KCmludCoqIE47Cgp2b2lkIHByZXBhcmUoKQp7CiAgICBpbnQgaTsKICAgIE4gPSBtYWxsb2MoOSAqIHNpemVvZihpbnQqKSk7CiAgICBmb3IgKGkgPSAxOyBpIDw9IDg7IGkrKykKICAgIHsKICAgICAgICBpbnQgbGVuZ3RoID0gaSAqIDkgKyAxOwogICAgICAgIE5baV0gPSBtYWxsb2MobGVuZ3RoICogc2l6ZW9mKGludCkpOwoKICAgICAgICBpZiAoaSA9PSAxKQogICAgICAgIHsKICAgICAgICAgICAgaW50IGo7CiAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBsZW5ndGg7IGorKykKICAgICAgICAgICAgICAgIE5baV1bal0gPSAxOwogICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgICBpbnQgcnVubmluZ3N1bSA9IDA7CiAgICAgICAgICAgIGludCBrID0gMDsKICAgICAgICAgICAgZm9yICggOyBrIDw9IGxlbmd0aCAvIDI7IGsrKykKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgcnVubmluZ3N1bSArPSBOW2ktMV1ba107CiAgICAgICAgICAgICAgICBpZiAoayA+PSAxMCkKICAgICAgICAgICAgICAgICAgIHJ1bm5pbmdzdW0gLT0gTltpLTFdW2stMTBdOwogICAgICAgICAgICAgICAgTltpXVtrXSA9IHJ1bm5pbmdzdW07CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZm9yICggOyBrIDwgbGVuZ3RoOyBrKyspCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIE5baV1ba10gPSBOW2ldW2xlbmd0aCAtIDEgLSBrXTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KfQoKc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyBsX3Qoc2l6ZV90IGRpZ2l0cykKewogICAgdW5zaWduZWQgbG9uZyBsb25nIHRpY2tldHMgPSAwOwogICAgc2l6ZV90IGkgPSAwOwoKICAgIGZvciggOyBpIDw9IChkaWdpdHMqOSk7IGkrKyApCiAgICB7CiAgICAgICAgdW5zaWduZWQgbG9uZyBsb25nIG4gPSBOW2RpZ2l0c11baV07CiAgICAgICAgdGlja2V0cyArPSBuKm47CiAgICB9CiAgICByZXR1cm4gdGlja2V0czsKfQoKaW50IG1haW4oKQp7CiAgICBwcmVwYXJlKCk7CiAgICBwcmludGYKICAgICgKICAgICAgICAiMTogJWxsdVxuMjogJWxsdVxuMzogJWxsdVxuNDogJWxsdVxuNTogJWxsdVxuNjogJWxsdVxuNzogJWxsdVxuODogJWxsdVxuIiwgCiAgICAgICAgbF90KDEpLGxfdCgyKSxsX3QoMyksbF90KDQpLGxfdCg1KSxsX3QoNiksbF90KDcpLGxfdCg4KQogICAgKTsKICAgIHJldHVybiAwOwp9Cg==