func_code_string: #include <bits/stdc++.h>   using namespace std;   const long long mod = 1e9 + 7;   int find_first_num_index(long long &k, long long n) {     if (n == 1) {       return 0;     }     n--;     int first_num_index;     long long n_partial_fact = n;     while (k >= n_partial_fact && n > 1) {       n_partial_fact *= (n - 1);       n--;     }     first_num_index = k / n_partial_fact;     k %= n_partial_fact;     return first_num_index;   }   vector<long long> find_kth_permutation(long long n, long long k) {     vector<long long> Ans;     set<long long> S;     for (int i = 1; i <= n; i++) {       S.insert(i);     }     auto itr = S.begin();     k -= 1;     for (int i = 0; i < n; i++) {       int index = find_first_num_index(k, n - i);       advance(itr, index);       Ans.push_back((*itr));       S.erase(itr);       itr = S.begin();     }     return Ans;   }   int main() {     ios_base::sync_with_stdio(false), cin.tie(0), cout.tie(0);     long long n, q, t, x = 1;     cin >> n >> q;     long long suff_len = min(14LL, n);     long long pref_len = n - suff_len;     long long Sil[20];     Sil[0] = 1;     for (int i = 1; i <= suff_len; i++) {       Sil[i] = Sil[i - 1] * i;     }     vector<long long> Suff = find_kth_permutation(suff_len, 1);     while (q--) {       cin >> t;       if (t == 1) {         long long l, r, ans = 0;         cin >> l >> r;         int r_pr = min(r, pref_len);         if (l <= r_pr) {           ans += 1ll * (l + r_pr) * (r_pr - l + 1) / 2;         }         r -= pref_len + 1;         l -= pref_len + 1;         r_pr = max(r_pr - pref_len - 1, 0LL);         for (int i = max(l, 0LL); i <= r; i++) {           ans += pref_len + Suff[i];         }         cout << ans << endl;       } else {         int dx;         cin >> dx;         x += dx;         x = min(x, Sil[suff_len]);         Suff = find_kth_permutation(suff_len, x);       }     }     return 0;   }   