using
System;
class
GFG{
public
static
int
[,,] dp =
new
int
[50, 1 << 10, 2];
public
static
int
countOfNumbers(
int
digit,
int
mask,
int
repeated,
int
n)
{
if
(digit == n + 1)
{
if
(repeated == 1)
{
return
1;
}
return
0;
}
if
(repeated == 1)
{
return
(
int
)Math.Pow(10, n - digit + 1);
}
int
val = dp[digit, mask, repeated];
if
(val != -1)
{
return
val;
}
val = 0;
if
(digit == 1)
{
for
(
int
i = (n == 1 ? 0 : 1); i <= 9; ++i)
{
if
((mask & (1 << i)) > 0)
{
val += countOfNumbers(
digit + 1, mask | (1 << i), 1, n);
}
else
{
val += countOfNumbers(
digit + 1, mask | (1 << i), 0, n);
}
}
}
else
{
for
(
int
i = 0; i <= 9; ++i)
{
if
((mask & (1 << i)) > 0)
{
val += countOfNumbers(
digit + 1, mask | (1 << i), 1, n);
}
else
{
val += countOfNumbers(
digit + 1, mask | (1 << i), 0, n);
}
}
}
return
val;
}
public
static
void
countNDigitNumber(
int
N)
{
for
(
int
i = 0; i < 50; i++)
{
for
(
int
j = 0; j < 1 << 10; j++)
{
for
(
int
k = 0; k < 2; k++)
{
dp[i, j, k] = -1;
}
}
}
Console.Write(countOfNumbers(1, 0, 0, N));
}
public
static
void
Main()
{
int
N = 2;
countNDigitNumber(N);
}
}