using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.IO;
using System.IO.Pipes;
using System.Linq;
using System.Numerics;
using System.Text;
using System.Threading.Tasks;

namespace AtCorders
{
	public class Program
	{
		static void Main(string[] args)
		{
			string n = Console.ReadLine();
			int l = n.Length;

			int bitmax = 1 << 3;
			var dp0 = new long[l];
			var dp1 = new long[l];
			for (int j = 0; j <= n[0] - '0'; j++) {
				if (j == n[0] - '0') {
					if (j == 3) {
						dp0[0] += 1;
					} else if (j == 5) {
						dp0[0] += 1;
					} else if (j == 7) {
						dp0[0] += 1;
					} else {
						dp0[0] += 1;
					}
				} else {
					if (j == 3) {
						dp1[0] += 1;
					} else if (j == 5) {
						dp1[0] += 1;
					} else if (j == 7) {
						dp1[0] += 1;
					} else {
						dp1[0] += 1;
					}
				}
			}

			for (int i = 1; i < l; i++) {
				int nn = n[i] - '0';
				dp1[i] = dp1[i - 1] * 3;
				for (int j = 0; j <= 9; j++) {
						if (j == 3) {
							if (j < nn) {
								dp1[i] += dp0[i - 1];
							}
							if (j == nn) {
								dp0[i] += 1;
							}
						} else if (j == 5) {
							if (j < nn) {
								dp1[i] += dp0[i - 1];
							}

							if (j == nn) {
								dp0[i] += 1;
							}
						} else if (j == 7) {
							if (j < nn) {
								dp1[i] += dp0[i - 1];
							}

							if (j == nn) {
								dp0[i] += 1;
							}
						} else {
							dp1[i] += dp1[i - 1];
							if (j < nn) {
								dp1[i] += dp0[i - 1];
							}

							if (j == nn) {
								dp0[i] += 1;
							}
						}
				}
			}

			long ans = dp0[l - 1] + dp1[l - 1];
			Console.WriteLine(ans);
		}
	}
}