#include using namespace std; using ll = long long; unsigned long long xor64() { static unsigned long long x = (unsigned long long)(chrono::duration_cast( chrono::high_resolution_clock::now().time_since_epoch()).count()) * 10150724397891781847ULL; x ^= x << 7; return x ^= x >> 9; } int int_rand(int r){ return ((r * (xor64() & ((1 << 30) - 1))) >> 30); } map> mp; tuple search(vector &divs, vector &D, ll lcv){ if(lcm(lcm(divs.rbegin()[2], divs.rbegin()[1]), divs.rbegin()[0]) == lcv){ return make_tuple(divs.rbegin()[2], divs.rbegin()[1], divs.rbegin()[0]); } if(mp.find(lcv) != mp.end()){ auto [A, B, C] = mp[lcv]; if(divs[0] <= A && C <= divs.back()) return make_tuple(A, B, C); } auto f = [&](ll v){ return lower_bound(D.begin(), D.end(), v) - D.begin(); }; int m = divs.size(), n = D.size(); vector> dp(n, make_pair(-1, -1)); for(int i = 0; i < m; i++){ for(int j = i + 1; j < m; j++){ int k = f(lcm(divs[i], divs[j])); if(dp[k].first == -1) dp[k] = make_pair(i, j); } } for(int i = 0; i < n; i++){ if(dp[i].first == -1) continue; for(int j = dp[i].second + 1; j < m; j++){ if(lcm(D[i], divs[j]) == lcv){ auto [a, b] = dp[i]; return mp[lcv] = make_tuple(divs[a], divs[b], divs[j]); } } } return make_tuple(-1, -1, -1); } tuple search_big(vector &divs, ll lcv){ if(lcm(lcm(divs.rbegin()[2], divs.rbegin()[1]), divs.rbegin()[0]) == lcv){ return make_tuple(divs.rbegin()[2], divs.rbegin()[1], divs.rbegin()[0]); } int n = divs.size(); for(int i = 0; i < 8000; i++){ int c = max(2, int_rand(n)); int b = max(1, int_rand(c)); int a = int_rand(b); if(lcm(lcm(divs[a], divs[b]), divs[c]) == lcv){ return make_tuple(divs[a], divs[b], divs[c]); } } int c = divs.size() - 1; for(int i = 0; i < 2000; i++){ int b = max(1, int_rand(c)); int a = int_rand(b); while(c == a || c == b) c = int_rand(n); if(lcm(lcm(divs[a], divs[b]), divs[c]) == lcv){ if(a > b) swap(a, b); if(b > c) swap(b, c); if(a > b) swap(a, b); return make_tuple(divs[a], divs[b], divs[c]); } } return make_tuple(-1, -1, -1); } int main(){ ios::sync_with_stdio(false); cin.tie(0); int T; cin >> T; while(T--){ ll n, l, r; cin >> n >> l >> r; vector divs, D; for(ll i = 1; i * i <= n; i++){ if(n % i == 0){ if(l <= i && i <= r) divs.emplace_back(i); D.emplace_back(i); ll v = n / i; if(l <= v && v <= r && v != i) divs.emplace_back(v); if(v != i) D.emplace_back(v); } } if(divs.size() < 3){ cout << "-1\n"; continue; } sort(divs.begin(), divs.end()); sort(D.begin(), D.end()); auto [A, B, C] = (divs.size() <= 200 ? search(divs, D, n) : search_big(divs, n)); if(A == -1){ cout << "-1\n"; }else{ cout << A << ' ' << B << ' ' << C << '\n'; } } }