Ivan has number b. He is sorting through the numbers a from 1 to 10^{18}, and for every a writes ([a,    b])/(a) on blackboard. Here [a,    b] stands for least common multiple of a and b. Ivan is very lazy, that's why this task bored him soon. But he is interested in how many different numbers he would write on the board if he would finish the task. Help him to find the quantity of different numbers he would write on the board.

Input

The only line contains one integer — b (1 ≤ b ≤ 10^{10}).

Output

Print one number — answer for the problem.

Examples

Input

1


Output

1

Input

2


Output

2

Note

In the first example [a,    1] = a, therefore ([a,    b])/(a) is always equal to 1.

In the second example [a,    2] can be equal to a or 2 ⋅ a depending on parity of a. ([a,    b])/(a) can be equal to 1 and 2.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.math.BigInteger;
import java.util.*;

import static java.lang.Math.*;

public class Main
{
	
    static final int mod = (int)1e9+7;
    public static void main(String[] args) throws Exception
    {
        FastReader in = new FastReader();
        PrintWriter out = new PrintWriter(System.out);
        int test =1;
        

        while(test-- > 0)      //test
        {  
        	
        	
        	long b=in.nextLong();
    		long a=numDivisors(b);
        	out.print(a);
        	
        	
        	
        	
        	
        }   //test
        out.flush();
        
    }
   
    
    static int[] intAr(int n)throws IOException
    {
    	FastReader in = new FastReader();
    	int a[]=new int[n];
        for(int i=0;i<n;i++)
        	a[i]=in.nextInt();
    		return a;
    		
    }
    static Long[] longAr(int n)throws IOException
    {
    	FastReader in = new FastReader();
        PrintWriter out = new PrintWriter(System.out);
    	Long a[]=new Long[n];
        for(int i=0;i<n;i++)
        	a[i]=in.nextLong();
    		return a;
    		
    }
    
    static int getMin(int arr[], int n)                             //min element of array 
    {
        return Arrays.stream(arr).min().getAsInt();
    }
 
    static int getMax(int arr[], int n)                               //max element of array 
    {
        return Arrays.stream(arr).max().getAsInt();
    }
   
    static boolean isPrime(int n)                       // check number if prime int
    { 
        // Corner case 
       
        // Check from 2 to n-1 
        for (int i = 2; i <= Math.sqrt(n); i++) 
            if (n % i == 0) 
                return false; 
  
        return true; 
    } 															
    
    static boolean isPrime(long n)                              // check number if prime long
    { 
        
        for (int i = 2; i <= Math.sqrt(n); i++) 
            if (n % i == 0) 
                return false; 
  
        return true; 
    } 															
    
    
    static long gcd(long a, long b)                          // Recursive method to return gcd of a and b

    {
        if (a == 0)
            return b;
        return gcd(b % a, a);
    }
     
  
    static long lcm(long a, long b)                               // method to return LCM of two numbers
    {
        return (a / gcd(a, b)) * b;
    }
     
    static boolean isPalindrome(String str)                 //check if string is palindrome
    {
 
        
        int i = 0, j = str.length() - 1;
 
       
        while (i < j) {
 
            
            if (str.charAt(i) != str.charAt(j))
                return false;
 
          
            i++;
            j--;
        }
 
        // Given string is a palindrome
        return true;
    }
    
    
    static int countDigit(long n)           //No. of digits in a number
    {
        int count = 0;
        while (n != 0) {
            n = n / 10;
            ++count;
        }
        return count;
    }
    
    static long numDivisors(long b)             //No. of Divisors in long
    {
    	long ans=0;
		for(long i=1;i*i<=b;i++){
			if(b%i==0){
				ans++;
				if(i*i!=b)	ans++;
			}
		}
		return ans;
    }
    
    
    static int numDivisors(int b)             //No. of Divisors in int
    {
    	int ans=0;
		for(long i=1;i*i<=b;i++){
			if(b%i==0){
				ans++;
				if(i*i!=b)	ans++;
			}
		}
		return ans;
    }
    
    
    
    
    
    
    
}



class FastReader
{
    BufferedReader br;
    StringTokenizer st;

    public FastReader()
    {
        br = new BufferedReader(new InputStreamReader(System.in));
    }

    public String next() throws IOException
    {
        if(st == null || !st.hasMoreElements())
        {
            st = new StringTokenizer(br.readLine());
        }

        return st.nextToken();
    }

    public boolean hasNext() throws IOException
    {
        if(st != null && st.hasMoreElements())
        {
            return true;
        }

        String s = br.readLine();
        if(s == null) {
            return false;
        }

        st = new StringTokenizer(s);

        return st.hasMoreElements();
    }

    public int nextInt() throws IOException
    {
        return Integer.parseInt(next());
    }

    public long nextLong() throws IOException
    {
        return Long.parseLong(next());
    }

    public String nextLine() throws IOException
    {
        return br.readLine();
    }
}