// AOJ 1060 No Story
// @kankichi573
#include <stdio.h>
#include <string.h>
 
char prime_flag[1000000];
 
int prime_1k[]={2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,
67,71,73,79,83,89,97,101,103,107,109,113,127,131,137,139,149,151,
157,163,167,173,179,181,191,193,197,199,211,223,227,229,233,239,
241,251,257,263,269,271,277,281,283,293,307,311,313,317,331,337,
347,349,353,359,367,373,379,383,389,397,401,409,419,421,431,433,
439,443,449,457,461,463,467,479,487,491,499,503,509,521,523,541,
547,557,563,569,571,577,587,593,599,601,607,613,617,619,631,641,
643,647,653,659,661,673,677,683,691,701,709,719,727,733,739,743,
751,757,761,769,773,787,797,809,811,821,823,827,829,839,853,857,
859,863,877,881,883,887,907,911,919,929,937,941,947,953,967,971,
           977,983,991,997,0};
 
int insuu_table[40];
int prime_power_table[40];
int prime_sort;              //soinsuu no shurui
 
make_furui()
{
        int i,j,num;
        memset(prime_flag,-1,1000000);
         
        prime_flag[0]=prime_flag[1]=0;
 
        for(i=0;prime_1k[i];i++)
                for(j=2;(num=prime_1k[i]*j)<1000000;j++)
                {
                        //printf("%d\n",num);
                        prime_flag[num]=0;
                }
}
int isprime1T(unsigned long long n)
{
        int i;
 
        for(i=2;i<1000000;i++)
                if(prime_flag[i] && 0==(n % i) && (n > i))
                        return(0);
        return(1);
}

int ptr;
void soinsuu_bunkai(unsigned long long n,int soinsuu)
{
  //printf("SB=%lld %d :%d\n",n,soinsuu,(int)(n % soinsuu));

  if(isprime1T(n))
    {
      if(n==insuu_table[ptr])
	prime_power_table[ptr]++;
      else
    {
      ptr++;
      insuu_table[ptr]=n;
      prime_power_table[ptr]=1;
    }
      return;
    }
  if((n % soinsuu) == 0)
    {
      insuu_table[ptr]=soinsuu;
      prime_power_table[ptr]++;
    }
  else
    {
      while(1)
	{
	  soinsuu++;
	  if(prime_flag[soinsuu] && (n % soinsuu)==0)
	    break;
	}
      ptr++;
      insuu_table[ptr]=soinsuu;
      prime_power_table[ptr]=1;
    }
  soinsuu_bunkai(n/soinsuu,soinsuu);
}
int calc()
{
  int i;
  int seki=1;
  for(i=0;i<=ptr;i++)
    seki *= (2*prime_power_table[i]+1);
  seki += 1;
  seki /= 2;
  return(seki);
}
print_result()
{
  int i;
 
  for(i=0;i<=ptr;i++)
    printf("%d:%d\n",insuu_table[i],prime_power_table[i]);
}
 
main()
{
        unsigned long long T;
    int N,i;  //soinsuu no shurui
 
        make_furui();
 
        while(scanf("%llu",&T) && T)
    {

      ptr=0;
      for(i=0;i<40;i++)
        prime_power_table[i]=0;
       

      if(T==1)
        printf("1\n");
      else
        {
          soinsuu_bunkai(T,2);
	  //print_result();
          printf("%d\n",calc());
        }
    }
        return(0);
}