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 C# (Mono 4.6.2.0) (judge verdict: Wrong Answer)

using System;
using System.Linq;
using System.Collections.Generic;
class Program
{
	static void Main(string[] args)
	{
	    long n = IO.GetLong();
	    if(n%2==1){
	        Console.WriteLine(0);
	        return;
	    }
	    
	    long ans2 = 0;
	    long ans5 = 0;
	    long inc = 1;
	    long dC = 0;
	    
	    do{
	        long b = (long)Math.Pow(2,inc);
	        //2
	        dC = n/b;
	        //Console.WriteLine("n:"+n+" b:"+b+" dC:"+dC);
	        ans2 += dC;
	        
	        inc++;
	    }
	    while(dC!=0 && inc!=60);
        
        inc=1;
	    do{
	        long b = (long)Math.Pow(5,inc);
	        //5
	        dC = n/b;
	        dC = (long)Math.Floor((double)dC/2);
	        //Console.WriteLine("n:"+n+" b:"+b+" dC:"+dC);
	        ans5 += dC;
	        
	        inc++;
	    }
	    while(dC!=0 && inc!=26);
	    
	    Console.WriteLine(Math.Min(ans2,ans5));
	}
    
}

static class IO
{
    static public string GetString() { return Console.ReadLine(); }
    static public int GetInt() { return int.Parse(Console.ReadLine()); }
    static public long GetLong() { return long.Parse(Console.ReadLine()); }
    static public List<string> GetStringList() { return Console.ReadLine().Split(' ').ToList(); }
    static public List<int> GetIntList() { return Console.ReadLine().Split(' ').Select(int.Parse).ToList(); }
    static public List<long> GetLongList() { return Console.ReadLine().Split(' ').Select(long.Parse).ToList(); }
    static public List<double> GetDoubleList() { return Console.ReadLine().Split(' ').Select(double.Parse).ToList(); }
    static public void WriteStrings<T>(IEnumerable<T> values) { foreach (var o in values) { Console.Write(o + " "); } }
}