// #define _GLIBCXX_DEBUG // for STL debug (optional) #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; using ll = long long int; using int64 = long long int; template void chmax(T &a, T b) {a = max(a, b);} template void chmin(T &a, T b) {a = min(a, b);} template void chadd(T &a, T b) {a = a + b;} int dx[] = {0, 0, 1, -1}; int dy[] = {1, -1, 0, 0}; const int INF = 1LL << 29; const ll LONGINF = 1LL << 60; const ll MOD = 1000000007LL; void solve() { ll A, B, C; scanf("%lld%lld%lld", &A, &B, &C); if(C == 1) { puts("-1"); return; } map< ll, ll > mp; auto calc = [&](auto &&self, ll N) -> ll { if(mp.count(N)) return mp[N]; if(N == 0) return 0; ll ans = (N+C-2) / (C-1) * B; if(N % C == 0) { ll k = N / C; chmin(ans, self(self, k) + B); } else { // floor { ll k = N/C; if(k!=N) chmin(ans, self(self, k) + 2*B); } // ceil { ll k = (N+C-1)/C; if(k!=N) chmin(ans, self(self, k) + 2*B); } } return mp[N] = ans; }; cout << calc(calc, A) << endl; } int main() { int Q; scanf("%d", &Q); while(Q--) solve(); return 0; }