#line 1 "template/template.hpp" #include #if __has_include() #include #endif using namespace std; using int64 = long long; const int64 infll = (1LL << 62) - 1; const int inf = (1 << 30) - 1; struct IoSetup { IoSetup() { cin.tie(nullptr); ios::sync_with_stdio(false); cout << fixed << setprecision(10); cerr << fixed << setprecision(10); } } iosetup; template ostream& operator<<(ostream& os, const pair& p) { os << p.first << " " << p.second; return os; } template istream& operator>>(istream& is, pair& p) { is >> p.first >> p.second; return is; } template ostream& operator<<(ostream& os, const vector& v) { for (size_t i = 0; i < v.size(); i++) { os << v[i] << (i + 1 != v.size() ? " " : ""); } return os; } template istream& operator>>(istream& is, vector& v) { for (T& in : v) is >> in; return is; } template bool chmax(T1& a, T2 b) { return a < b && (a = b, true); } template bool chmin(T1& a, T2 b) { return a > b && (a = b, true); } template vector make_v(size_t a) { return vector(a); } template auto make_v(size_t a, Ts... ts) { return vector(ts...))>(a, make_v(ts...)); } template enable_if_t == 0> fill_v(T& t, const V& v) { t = v; } template enable_if_t != 0> fill_v(T& t, const V& v) { for (auto& e : t) fill_v(e, v); } template struct FixPoint : F { explicit FixPoint(F&& f) : F(std::forward(f)) {} template decltype(auto) operator()(Args&&... args) const { return F::operator()(*this, std::forward(args)...); } }; template decltype(auto) MFP(F&& f) { return FixPoint{std::forward(f)}; } #line 2 "math/number-theory/prime-factor.hpp" #include #include std::map prime_factor(std::int64_t n) { std::map ret; for (std::int64_t i = 2; i * i <= n; i++) { while (n % i == 0) { ret[i]++; n /= i; } } if (n != 1) ret[n] = 1; return ret; } void sub() { int N, L, R; cin >> N >> L >> R; vector< pair< int, int > > pf; { auto buf = prime_factor(N); pf = {buf.begin(), buf.end()}; } vector< vector< int > > cand(1 << pf.size()); auto dfs = MFP([&](auto dfs, int idx, int v, int mask) -> void { if (idx == pf.size()) { if (L <= v and v <= R and cand[mask].size() < 3) { cand[mask].emplace_back(v); } return; } for (int i = 0; i <= pf[idx].second; i++) { if (i == pf[idx].second) { dfs(idx + 1, v, mask | (1 << idx)); } dfs(idx + 1, v, mask); v *= pf[idx].first; } }); dfs(0, 1, 0); int mask = (1 << pf.size()) - 1; for (int i = mask;; i = i - 1 & mask) { int zan = mask ^ i; for (int j = zan;; j = j - 1 & zan) { int k = mask^i^j; for (auto& a : cand[i]) { for (auto& b : cand[j]) { if (a != b) { for (auto& c : cand[k]) { if (a != c and b != c) { vector ans{a, b, c}; ranges::sort(ans); cout << ans << endl; return; } } } } } if (j == 0) break; } if (i == 0) break; } cout << -1 << "\n"; } int main() { int T; cin >> T; while (T--) { sub(); } }