Problem:
Score : 500 points

Problem Statement

For an integer n not less than 0, let us define f(n) as follows:

f(n) = 1 (if n < 2)

f(n) = n f(n-2) (if n \geq 2)

Given is an integer N. Find the number of trailing zeros in the decimal notation of f(N).

Constraints

0 \leq N \leq 10^{18}

Input

Input is given from Standard Input in the following format:

N

Output

Print the number of trailing zeros in the decimal notation of f(N).

Sample Input 1

12

Sample Output 1

1

f(12) = 12 × 10 × 8 × 6 × 4 × 2 = 46080, which has one trailing zero.

Sample Input 2

5

Sample Output 2

0

f(5) = 5 × 3 × 1 = 15, which has no trailing zeros.

Sample Input 3

1000000000000000000

Sample Output 3

124999999999999995

Solution in Rust (1.15.1) (judge verdict: Accepted)

use std::vec::Vec;
use std::cmp::min;

fn read<T: std::str::FromStr>() -> T {
    let mut s = String::new();
    std::io::stdin().read_line(&mut s).ok();
    s.trim().parse().ok().unwrap()
}

fn read_vec<T: std::str::FromStr>() -> Vec<T> {
    read::<String>().split_whitespace().map(|e| e.parse().ok().unwrap()).collect()
}

fn read_touple<T: std::str::FromStr + Copy>() -> (T, T) {
  let v: Vec<T> = read_vec();
  assert_eq!(v.len(), 2);
  (v[0], v[1])
}

fn main() {
    let n: usize = read();
    let k: usize  = n / 2;
    let mut ans = 0;
    if n % 2 == 0 {
        let c5: usize = count(k, 5);
        let c2: usize = count(k, 2);
        ans = min(k+c2, c5);
    } else {
        let c5_2k: usize = count(2*k, 5);
        let c2_2k: usize = count(2*k, 2);
        let c5_k: usize = count(k, 5);
        let c2_k: usize = count(k, 2);
        ans = min(c2_2k - c2_k - k, c5_2k-c5_k);
    }

    println!("{}", ans);
}


fn count(n: usize, k: usize) -> usize {
  let mut n = n;
  let mut res_k = 0;
  while n > 0 {
    res_k += n / k;
    n /= k;
  }

  res_k
}