#include <bits/stdc++.h>   using namespace std;   long long Set(long long N, long long pos) { return N = N | (1 << pos); }   long long reset(long long N, long long pos) { return N = N & ~(1 << pos); }   bool check(long long N, long long pos) { return (bool)(N & (1 << pos)); }   void CI(long long &_x) { scanf( %d , &_x); }   void CO(long long &_x) { cout << _x; }   template <typename T>   void getarray(T a[], long long n) {     for (long long i = 0; i < n; i++) cin >> a[i];   }   template <typename T>   void prLLIarray(T a[], long long n) {     for (long long i = 0; i < n - 1; i++) cout << a[i] <<    ;     cout << a[n - 1] << endl;   }   const double EPS = 1e-9;   const long long INF = 0x7f7f7f7f;   long long dr8[8] = {1, -1, 0, 0, 1, -1, -1, 1};   long long dc8[8] = {0, 0, -1, 1, 1, 1, -1, -1};   long long dr4[4] = {0, 0, 1, -1};   long long dc4[4] = {-1, 1, 0, 0};   long long kn8r[8] = {1, 2, 2, 1, -1, -2, -2, -1};   long long kn8c[8] = {2, 1, -1, -2, -2, -1, 1, 2};   long long pow(long long a, long long b) {     long long ans = 1;     for (long long i = 0; i < b; i++) ans *= a;     return ans;   }   int main() {     long long a, b, n;     cin >> a >> b >> n;     if (b == 0) {       cout <<  0 n ;       return 0;     }     if (a == 0) {       puts( No solution );       return 0;     }     long long y = b / a;     long long low = -(1001), hi = (1001);     for (int i = 1; i <= 1000; i++) {       long long kk = 0, temp = abs(y);       while (temp % i == 0 && kk < n) {         temp = temp / i;         kk++;       }       if (kk == n && temp == 1) {         if (y < 0) i *= -1;         cout << i <<   n ;         return 0;       }     }     puts( No solution );   }   