Advertisement
coloriot

HA_42_4

Feb 16th, 2025
22
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.84 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <cassert>
  4. #include <algorithm>
  5. using namespace std;
  6.  
  7. typedef long long ll;
  8. const ll MOD = 1000000007;
  9.  
  10. ll modExp(ll base, ll exp, ll mod = MOD) {
  11.     ll result = 1 % mod;
  12.     base %= mod;
  13.     while(exp > 0) {
  14.         if(exp & 1) result = (result * base) % mod;
  15.         base = (base * base) % mod;
  16.         exp >>= 1;
  17.     }
  18.     return result;
  19. }
  20.  
  21. class Factorials {
  22. public:
  23.     vector<ll> fact, invFact;
  24.     int n;
  25.     Factorials(int n) : n(n) {
  26.         fact.resize(n + 1);
  27.         invFact.resize(n + 1);
  28.         fact[0] = 1;
  29.         for (int i = 1; i <= n; i++){
  30.             fact[i] = (fact[i - 1] * i) % MOD;
  31.         }
  32.         invFact[n] = modExp(fact[n], MOD - 2, MOD);
  33.         for (int i = n; i >= 1; i--){
  34.             invFact[i - 1] = (invFact[i] * i) % MOD;
  35.         }
  36.     }
  37.     ll binom(int a, int b) {
  38.         if(b < 0 || b > a) return 0;
  39.         return ((fact[a] * invFact[b]) % MOD * invFact[a - b]) % MOD;
  40.     }
  41. };
  42.  
  43. class GoodGraphsSolver {
  44. public:
  45.     void solve() {
  46.         ios::sync_with_stdio(false);
  47.         cin.tie(nullptr);
  48.  
  49.         int n;
  50.         cin >> n;
  51.  
  52.         if(n == 1) {
  53.             cout << 1 << "\n";
  54.             return;
  55.         }
  56.  
  57.         int m = n - 1;
  58.         Factorials fact(m);
  59.         ll F = 0;
  60.         for (int r = 0; r <= m; r++) {
  61.             int x = m - r;
  62.             ll exponent = ((ll)x * (x - 1)) / 2;
  63.             ll ways = modExp(2, exponent, MOD);
  64.             ll term = (fact.binom(m, r) * ways) % MOD;
  65.             if(r % 2 == 1) term = (MOD - term) % MOD;
  66.             F = (F + term) % MOD;
  67.         }
  68.  
  69.         ll ans = ( (ll)n * F ) % MOD;
  70.         cout << ans << "\n";
  71.     }
  72. };
  73.  
  74. int main(){
  75.     ios::sync_with_stdio(false);
  76.     cin.tie(nullptr);
  77.  
  78.     GoodGraphsSolver solver;
  79.     solver.solve();
  80.     return 0;
  81. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement