#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); } tuple search(vector &divs, ll lcv){ int n = divs.size(); constexpr int th = 50; for(int i = 0; i < n && i < th; i++){ for(int j = i + 1; j < n && j < th; j++){ ll lv2 = lcm(divs.rbegin()[i], divs.rbegin()[j]); for(int k = j + 1; k < n && k < th; k++){ if(lcm(lv2, divs.rbegin()[k]) == lcv){ return make_tuple(divs.rbegin()[k], divs.rbegin()[j], divs.rbegin()[i]); } } } } for(int i = 0; i < 5000; 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 < 1000; i++){ 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]); } } 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; for(ll i = 1; i * i <= n; i++){ if(n % i == 0){ if(l <= i && i <= r) divs.emplace_back(i); ll v = n / i; if(l <= v && v <= r && v != i) divs.emplace_back(v); } } if(divs.size() < 3){ cout << "-1\n"; continue; } sort(divs.begin(), divs.end()); auto [A, B, C] = search(divs, n); if(A == -1){ cout << "-1\n"; }else{ cout << A << ' ' << B << ' ' << C << '\n'; } } }