#include <bits/stdc++.h>
using namespace std;
int prime[1000];
int k = 1;
void get_prime() {
  int flag;
  prime[0] = 2;
  for (int i = 3; i < 1000; i++) {
    flag = 0;
    for (int j = 0; j < k; j++) {
      if (i % prime[0] == 0) {
        flag = 1;
        break;
      }
    }
    if (flag == 0) prime[k++] = i;
  }
}
int rs(int a, int b) {
  int ans = 1;
  for (int i = 1; i <= b; i++) ans *= a;
  return ans;
}
int main() {
  int a, b, n, c, m, ans = 1, flag = 0, a1, b1;
  scanf("%d%d%d", &a, &b, &n);
  a1 = a >= 0 ? a : -a;
  b1 = b >= 0 ? b : -b;
  if (b == 0) {
    printf("0\n");
  } else if (a == 0)
    printf("No solution\n");
  else {
    if (a * b < 0 && n % 2 == 0)
      printf("No solution\n");
    else {
      if (b1 % a1 != 0)
        printf("No solution\n");
      else {
        if (n == 1)
          if (a * b < 0)
            printf("%d\n", -b1 / a1);
          else
            printf("%d\n", b1 / a1);
        else {
          c = b1 / a1;
          if (c == 1) {
            if (a * b < 0)
              printf("-1\n");
            else
              printf("1\n");
          } else {
            get_prime();
            for (int i = 0; i < k; i++) {
              m = 0;
              if (c == 1 || c < prime[i]) break;
              while (c % prime[i] == 0) {
                m++;
                c /= prime[i];
              }
              if (m % n != 0) {
                flag = 1;
                printf("No solution\n");
                break;
              } else {
                if (m > 0) ans *= rs(prime[i], m / n);
              }
            }
            if (flag == 0) {
              if (c == 1) {
                if (a * b < 0)
                  printf("%d\n", -ans);
                else
                  printf("%d\n", ans);
              } else
                printf("No solution\n");
            }
          }
        }
      }
    }
  }
  return 0;
}
