/* Good But Not Perfect */

void factor(int n, int a[], int *num)
/* returns the factors of a number */
{
int i;

for (i = 2; i < n; i++)
   if (n % i == 0)
      {
      a[0] = i;
      factor(n/i, a+1, num);
      *num = *num + 1;
      return;
      }

/* n is prime */
a[0] = n;
*num = 1;      
}

int sum_digits(int n)
/* sums the digits of a number */
{
int sum = 0;

while (n > 0)
   {
   sum += n % 10;
   n /= 10;
   }
return sum;
}

int good(int n)
/* returns 1 iff n is a good number */
{
int num;          /* number of factors of n */
int array[1000];  /* holds factors of n */
int i;
int sum_fact;     /* sum of digits of prime factors of n */

factor(n, array, &num);
sum_fact = 0;
for (i = 0; i < num; i++)
   sum_fact += sum_digits(array[i]);
return sum_fact == sum_digits(n);
}

void main(void)
{
int n;

do {
   scanf("%d", &n);
   if (n == 0) break;
   if (good(n))
      printf("%d is a good number\n", n);
      else
      printf("%d is not a good number\n", n);
   } while (1);
}

