using
System;
class
Program
{
static
int
[,,,,] dp;
static
int
Solve(
int
ind,
int
two,
int
four,
int
eight,
int
flag,
string
s)
{
if
(ind == s.Length)
{
if
(two == four && four == eight && two != 0 && four != 0 && eight != 0)
return
1;
else
return
0;
}
if
(dp[ind, two, four, eight, flag] != -1)
return
dp[ind, two, four, eight, flag];
int
ans = 0;
if
(flag == 0)
{
for
(
int
i = 0; i <
int
.Parse(s[ind].ToString()); i++)
{
ans += Solve(ind + 1, two + (i == 2 ? 1 : 0), four + (i == 4 ? 1 : 0), eight + (i == 8 ? 1 : 0), 1, s);
}
ans += Solve(ind + 1, two + (s[ind] ==
'2'
? 1 : 0), four + (s[ind] ==
'4'
? 1 : 0), eight + (s[ind] ==
'8'
? 1 : 0), 0, s);
}
else
{
for
(
int
i = 0; i < 10; i++)
{
ans += Solve(ind + 1, two + (i == 2 ? 1 : 0), four + (i == 4 ? 1 : 0), eight + (i == 8 ? 1 : 0), 1, s);
}
}
dp[ind, two, four, eight, flag] = ans;
return
ans;
}
static
void
Main()
{
int
n = 1248;
string
s1 = n.ToString();
dp =
new
int
[s1.Length + 1, 10, 10, 10, 2];
for
(
int
i = 0; i <= s1.Length; i++)
{
for
(
int
j = 0; j < 10; j++)
{
for
(
int
k = 0; k < 10; k++)
{
for
(
int
l = 0; l < 10; l++)
{
for
(
int
m = 0; m < 2; m++)
{
dp[i, j, k, l, m] = -1;
}
}
}
}
}
int
result = Solve(0, 0, 0, 0, 0, s1);
Console.WriteLine(result);
}
}