open System

// prelude
let readStr () = stdin.ReadLine()

let read f () = readStr() |> f
let reads f () = readStr().Split() |> Array.map f

let pair = function
| [|a; b|] -> (a, b)
| _ -> failwith "owatta"

let triple = function
| [|a; b; c|] -> (a, b, c)
| _ -> failwith "owatta"

let readPair f g () =
  let (a,b) = readStr().Split() |> pair
  (f a, g b)

let readTriple f g h () =
  let (a,b,c) = readStr().Split() |> triple
  (f a, g b, h c)

let inc n = n + 1
let dec n = n - 1

let inline flip f a b = f b a
let rec fix f = fun x -> (f (fix f)) x

module Option =
  let getOr defaultValue = function
  | Some x -> x
  | None -> defaultValue

module Array =
  let modify (arr: _ []) i f =
    arr.[i] <- f arr.[i]

module Array2D =
  let modify (arr: _ [,]) i j f =
    arr.[i, j] <- f arr.[i, j]

// start
let N = read int64 ()

let rec nums n = 
  if n=1 then Seq.ofList [3L; 5L; 7L]
  else
    nums (n-1)
    |> Seq.collect (fun m -> nums 1 |> Seq.map (fun x -> m*10L+x))

seq {
  for n in 1..9 do
    yield! (nums n)
}
|> Seq.filter (fun n -> n<N)
|> Seq.filter (fun n ->
  let s = (string n).ToCharArray() |> Set.ofArray
  ['3';'5';'7'] |> List.forall (fun c -> s |> Set.contains c)
)
|> Seq.length
|> printfn "%d"