#include #include #include #include #include #include #include using i64 = long long; using u64 = unsigned long long; #define rep(i,n) for(int i=0; i=0; i--) const i64 INF = 1001001001001001001; const char* yn(bool x){ return x ? "Yes" : "No"; } template void chmin(A& l, const A& r){ if(r < l) l = r; } template void chmax(A& l, const A& r){ if(l < r) l = r; } template using nega_queue = std::priority_queue,std::greater>; using namespace std; void testcase(){ i64 N, A, B, C; cin >> N >> A >> B >> C; i64 K = 0; { i64 f = 1; while(INF / B >= f){ K++; f *= B; } } i64 Nfactor = 0; { i64 n = N; for(i64 p=2; p*p<=n; p++) if(n%p == 0){ i64 cnt = 0; while(n%p == 0){ n /= p; cnt++; } i64 targetq = 0; for(i64 q=1; q<=cnt; q++){ i64 qq = q; i64 qc = 0; while(qq){ qc += qq; qq /= p; } if(qc >= cnt){ targetq = q; break; } } chmax(Nfactor, p * targetq); } chmax(Nfactor, n); } nega_queue> que; vector dist(N*2, INF); i64 ans = A * (N-1); auto upd = [&](i64 v, i64 d){ if(dist[v] > d){ dist[v] = d; que.push({ d, v }); } }; vector fact(N); fact[0] = 1; auto xmod = [&](i64 a){ if(a >= N) return (a-N) % N + N; return a; }; for(i64 i=1; i> T; for(int t=0; t