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);
}
}
// Code is Contributed By Block_Cipher