#include <bits/stdc++.h>
using namespace std;
// #include <ext/pb_ds/tree_policy.hpp>
// #include <ext/pb_ds/assoc_container.hpp>
//
// using namespace __gnu_pbds;
// template<typename T>
// using ordered_set = tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>;
// #include <ext/pb_ds/assoc_container.hpp>
// #define deb(...) logger(#__VA_ARGS__, __VA_ARGS__)
//
// template<typename... Args>
// void logger(string vars, Args &&... values) {
// cout << vars << " = ";
// string delim = "";
// (..., (cout << delim << values, delim = ", "));
// cout << '\n';
// }
#define int long long
#define ll long long
#define ld long double
#define nl "\n"
#define aw3dni_ink_tet3aleg ios_base::sync_with_stdio(false), cout.tie(NULL), cin.tie(NULL);
#define ff first
#define ss second
#define all(x) x.begin(),x.end()
#define sz(x) x.size()
void FILES() {
aw3dni_ink_tet3aleg
#ifndef ONLINE_JUDGE
freopen("input.txt", "r", stdin);
freopen("output.txt", "w", stdout);
#endif
}
ll OO = 0x3f3f3f3f3f3f3f3f, oo = 0x3f3f3f3f;
// const int M = 1e9 + 7, P1 = 31, P2 = 37, N = 1e5 + 5;
const ld PI = 3.14159265;
// وَقُلْ رَبِّ زِدْنِي عِلْمًا
struct SegmentTree {
vector<vector<int>> seg;
int size;
SegmentTree(vector<int>& v) {
int n = sz(v);
size = 1;
while (size < n) size <<= 1;
seg.resize(size * 2);
build(0, size - 1, 0, v);
}
void build(int l, int r, int node, vector<int>& v) {
if (l == r) {
if (l < sz(v)) seg[node] = {v[l]};
return;
}
int m = (l + r) / 2;
build(l, m, 2 * node + 1, v);
build(m + 1, r, 2 * node + 2, v);
seg[node].resize(sz(seg[2 * node + 1]) + sz(seg[2 * node + 2]));
merge(all(seg[2 * node + 1]), all(seg[2 * node + 2]), seg[node].begin());
}
int query(int l, int r, int node, int lq, int rq, int val) {
if (rq < l || r < lq) return 0;
if (lq <= l && r <= rq) {
auto it = upper_bound(all(seg[node]), val);
return seg[node].end() - it;
}
int m = (l + r) / 2;
return query(l, m, 2 * node + 1, lq, rq, val) +
query(m + 1, r, 2 * node + 2, lq, rq, val);
}
int query(int lq, int rq, int val) {
return query(0, size - 1, 0, lq, rq, val);
}
};
int baby_stap(int a, int b, int m) {
a %= m, b %= m;
int n = sqrtl(m) + 1;
int an = 1;
for (int i = 0; i < n; ++i)
an = (an * 1ll * a) % m;
unordered_map<int, int> vals;
for (int q = 0, cur = b; q <= n; ++q) {
vals[cur] = q;
cur = (cur * 1ll * a) % m;
}
for (int p = 1, cur = 1; p <= n; ++p) {
cur = (cur * 1ll * an) % m;
if (vals.count(cur)) {
int ans = n * p - vals[cur];
return ans;
}
}
return -1;
}
void solve() {
int a, b, m;
cin >> a >> b >> m;
if (m==1) {
return void(cout << 1);
}
if (a == 0) {
if (b == 1) cout << 0; // 0^0 = 1
else cout << 1; // 0^1 = 0 (b must be 0)
return;
}
cout << baby_stap(a, b, m);
}
signed main() {
FILES();
int T = 1;
// seive();
// pre_count();
cin >> T;
while (T--) {
solve();
cout << nl;
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Ci8vICNpbmNsdWRlIDxleHQvcGJfZHMvdHJlZV9wb2xpY3kuaHBwPgovLyAjaW5jbHVkZSA8ZXh0L3BiX2RzL2Fzc29jX2NvbnRhaW5lci5ocHA+Ci8vCi8vIHVzaW5nIG5hbWVzcGFjZSBfX2dudV9wYmRzOwovLyB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgovLyB1c2luZyBvcmRlcmVkX3NldCA9IHRyZWU8VCwgbnVsbF90eXBlLCBsZXNzPFQ+LCByYl90cmVlX3RhZywgdHJlZV9vcmRlcl9zdGF0aXN0aWNzX25vZGVfdXBkYXRlPjsKLy8gI2luY2x1ZGUgPGV4dC9wYl9kcy9hc3NvY19jb250YWluZXIuaHBwPgovLyAjZGVmaW5lIGRlYiguLi4pIGxvZ2dlcigjX19WQV9BUkdTX18sIF9fVkFfQVJHU19fKQovLwovLyB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmdzPgovLyB2b2lkIGxvZ2dlcihzdHJpbmcgdmFycywgQXJncyAmJi4uLiB2YWx1ZXMpIHsKLy8gICAgIGNvdXQgPDwgdmFycyA8PCAiID0gIjsKLy8gICAgIHN0cmluZyBkZWxpbSA9ICIiOwovLyAgICAgKC4uLiwgKGNvdXQgPDwgZGVsaW0gPDwgdmFsdWVzLCBkZWxpbSA9ICIsICIpKTsKLy8gICAgIGNvdXQgPDwgJ1xuJzsKLy8gfQoKI2RlZmluZSBpbnQgbG9uZyBsb25nCiNkZWZpbmUgbGwgbG9uZyBsb25nCiNkZWZpbmUgbGQgbG9uZyBkb3VibGUKI2RlZmluZSBubCAiXG4iCiNkZWZpbmUgYXczZG5pX2lua190ZXQzYWxlZyBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKGZhbHNlKSwgY291dC50aWUoTlVMTCksIGNpbi50aWUoTlVMTCk7CiNkZWZpbmUgZmYgZmlyc3QKI2RlZmluZSBzcyBzZWNvbmQKI2RlZmluZSBhbGwoeCkgeC5iZWdpbigpLHguZW5kKCkKI2RlZmluZSBzeih4KSB4LnNpemUoKQoKdm9pZCBGSUxFUygpIHsKICAgIGF3M2RuaV9pbmtfdGV0M2FsZWcKI2lmbmRlZiBPTkxJTkVfSlVER0UKICAgIGZyZW9wZW4oImlucHV0LnR4dCIsICJyIiwgc3RkaW4pOwogICAgZnJlb3Blbigib3V0cHV0LnR4dCIsICJ3Iiwgc3Rkb3V0KTsKI2VuZGlmCn0KCmxsIE9PID0gMHgzZjNmM2YzZjNmM2YzZjNmLCBvbyA9IDB4M2YzZjNmM2Y7Ci8vIGNvbnN0IGludCBNID0gMWU5ICsgNywgUDEgPSAzMSwgUDIgPSAzNywgTiA9IDFlNSArIDU7CmNvbnN0IGxkIFBJID0gMy4xNDE1OTI2NTsKCi8vINmI2Y7ZgtmP2YTZkiDYsdmO2KjZkNmRINiy2ZDYr9mS2YbZkNmKINi52ZDZhNmS2YXZi9inCnN0cnVjdCBTZWdtZW50VHJlZSB7CiAgICB2ZWN0b3I8dmVjdG9yPGludD4+IHNlZzsKICAgIGludCBzaXplOwoKICAgIFNlZ21lbnRUcmVlKHZlY3RvcjxpbnQ+JiB2KSB7CiAgICAgICAgaW50IG4gPSBzeih2KTsKICAgICAgICBzaXplID0gMTsKICAgICAgICB3aGlsZSAoc2l6ZSA8IG4pIHNpemUgPDw9IDE7CiAgICAgICAgc2VnLnJlc2l6ZShzaXplICogMik7CiAgICAgICAgYnVpbGQoMCwgc2l6ZSAtIDEsIDAsIHYpOwogICAgfQoKICAgIHZvaWQgYnVpbGQoaW50IGwsIGludCByLCBpbnQgbm9kZSwgdmVjdG9yPGludD4mIHYpIHsKICAgICAgICBpZiAobCA9PSByKSB7CiAgICAgICAgICAgIGlmIChsIDwgc3oodikpIHNlZ1tub2RlXSA9IHt2W2xdfTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBpbnQgbSA9IChsICsgcikgLyAyOwogICAgICAgIGJ1aWxkKGwsIG0sIDIgKiBub2RlICsgMSwgdik7CiAgICAgICAgYnVpbGQobSArIDEsIHIsIDIgKiBub2RlICsgMiwgdik7CiAgICAgICAgc2VnW25vZGVdLnJlc2l6ZShzeihzZWdbMiAqIG5vZGUgKyAxXSkgKyBzeihzZWdbMiAqIG5vZGUgKyAyXSkpOwogICAgICAgIG1lcmdlKGFsbChzZWdbMiAqIG5vZGUgKyAxXSksIGFsbChzZWdbMiAqIG5vZGUgKyAyXSksIHNlZ1tub2RlXS5iZWdpbigpKTsKICAgIH0KCiAgICBpbnQgcXVlcnkoaW50IGwsIGludCByLCBpbnQgbm9kZSwgaW50IGxxLCBpbnQgcnEsIGludCB2YWwpIHsKICAgICAgICBpZiAocnEgPCBsIHx8IHIgPCBscSkgcmV0dXJuIDA7CiAgICAgICAgaWYgKGxxIDw9IGwgJiYgciA8PSBycSkgewogICAgICAgICAgICBhdXRvIGl0ID0gdXBwZXJfYm91bmQoYWxsKHNlZ1tub2RlXSksIHZhbCk7CiAgICAgICAgICAgIHJldHVybiBzZWdbbm9kZV0uZW5kKCkgLSBpdDsKICAgICAgICB9CiAgICAgICAgaW50IG0gPSAobCArIHIpIC8gMjsKICAgICAgICByZXR1cm4gcXVlcnkobCwgbSwgMiAqIG5vZGUgKyAxLCBscSwgcnEsIHZhbCkgKwogICAgICAgICAgICAgICBxdWVyeShtICsgMSwgciwgMiAqIG5vZGUgKyAyLCBscSwgcnEsIHZhbCk7CiAgICB9CgogICAgaW50IHF1ZXJ5KGludCBscSwgaW50IHJxLCBpbnQgdmFsKSB7CiAgICAgICAgcmV0dXJuIHF1ZXJ5KDAsIHNpemUgLSAxLCAwLCBscSwgcnEsIHZhbCk7CiAgICB9Cn07CgppbnQgYmFieV9zdGFwKGludCBhLCBpbnQgYiwgaW50IG0pIHsKICAgIGEgJT0gbSwgYiAlPSBtOwogICAgaW50IG4gPSBzcXJ0bChtKSArIDE7CiAgICBpbnQgYW4gPSAxOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyArK2kpCiAgICAgICAgYW4gPSAoYW4gKiAxbGwgKiBhKSAlIG07CiAgICB1bm9yZGVyZWRfbWFwPGludCwgaW50PiB2YWxzOwogICAgZm9yIChpbnQgcSA9IDAsIGN1ciA9IGI7IHEgPD0gbjsgKytxKSB7CiAgICAgICAgdmFsc1tjdXJdID0gcTsKICAgICAgICBjdXIgPSAoY3VyICogMWxsICogYSkgJSBtOwogICAgfQogICAgZm9yIChpbnQgcCA9IDEsIGN1ciA9IDE7IHAgPD0gbjsgKytwKSB7CiAgICAgICAgY3VyID0gKGN1ciAqIDFsbCAqIGFuKSAlIG07CiAgICAgICAgaWYgKHZhbHMuY291bnQoY3VyKSkgewogICAgICAgICAgICBpbnQgYW5zID0gbiAqIHAgLSB2YWxzW2N1cl07CiAgICAgICAgICAgIHJldHVybiBhbnM7CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIC0xOwp9Cgp2b2lkIHNvbHZlKCkgewogICAgaW50IGEsIGIsIG07CiAgICBjaW4gPj4gYSA+PiBiID4+IG07CiAgICBpZiAobT09MSkgewogICAgICAgIHJldHVybiB2b2lkKGNvdXQgPDwgMSk7CiAgICB9CiAgICBpZiAoYSA9PSAwKSB7CiAgICAgICAgaWYgKGIgPT0gMSkgY291dCA8PCAwOyAvLyAwXjAgPSAxCiAgICAgICAgZWxzZSBjb3V0IDw8IDE7IC8vIDBeMSA9IDAgKGIgbXVzdCBiZSAwKQogICAgICAgIHJldHVybjsKICAgIH0KICAgIGNvdXQgPDwgYmFieV9zdGFwKGEsIGIsIG0pOwp9CgpzaWduZWQgbWFpbigpIHsKICAgIEZJTEVTKCk7CiAgICBpbnQgVCA9IDE7CiAgICAvLyBzZWl2ZSgpOwogICAgLy8gcHJlX2NvdW50KCk7CiAgICBjaW4gPj4gVDsKICAgIHdoaWxlIChULS0pIHsKICAgICAgICBzb2x2ZSgpOwogICAgICAgIGNvdXQgPDwgbmw7CiAgICB9CiAgICByZXR1cm4gMDsKfQo=