<script>
var
dp = Array(100).fill().map(()=>Array(1 << 5).fill().map(()=>Array(1 << 5).fill(0)));
function
__builtin_popcount(n) {
var
d, t = 0;
while
(n > 0) {
d = n % 2;
n = parseInt(n / 2);
if
(d == 1)
t++;
}
return
t;
}
function
countOfNumbers(index , evenMask , oddMask , N) {
if
(index == N + 1) {
var
countOfEvenDigits = __builtin_popcount(evenMask);
var
countOfOddDigits = __builtin_popcount(oddMask);
if
(countOfOddDigits == countOfEvenDigits) {
return
1;
}
return
0;
}
var
val = dp[index][evenMask][oddMask];
if
(val != -1)
return
val;
val = 0;
if
(index == 1) {
for
(digit = (N == 1 ? 0 : 1); digit <= 9; ++digit) {
if
((digit & 1) != 0) {
val += countOfNumbers(index + 1, evenMask, oddMask | (1 << (digit / 2)), N);
}
else
{
val += countOfNumbers(index + 1, evenMask | (1 << (digit / 2)), oddMask, N);
}
}
}
else
{
for
(
var
digit = 0; digit <= 9; ++digit) {
if
((digit & 1) != 0) {
val += countOfNumbers(index + 1, evenMask, oddMask | (1 << (digit / 2)), N);
}
else
{
val += countOfNumbers(index + 1, evenMask | (1 << (digit / 2)), oddMask, N);
}
}
}
return
val;
}
function
countNDigitNumber(N) {
for
(
var
i = 0; i < 100; i++) {
for
(
var
j = 0; j < (1 << 5); j++) {
for
(
var
k = 0; k < (1 << 5); k++) {
dp[i][j][k] = -1;
}
}
}
document.write(countOfNumbers(1, 0, 0, N));
}
var
N = 3;
countNDigitNumber(N);
</script>