Problem: 2052A - Adrenaline Rush
Language: C++23 (GCC 14-64, msys2)

Previous submission (verdict: Wrong answer on test 12):
// //12345
// //12435
// 3 4

// 2 1
// 1 2
// 3 2
// 3 1
// 1 3
// 2 3
// 12345
// 4 3
// 4 2
// 4 1
// 1 4
// 2 4
// 3 4*

// //12345
// //14352
// 2 3
// 2 4
// 2 5
// 3 4

// 2 1
// 1 2
// 3 2
// 3 1
// 1 3
// 2 3*
// 13245
// 4 2
// 4 3
// 4 1
// 1 4
// 2 4*
// 14325
// 5 2
// 5 3
// 5 4
// 5 1
// 1 5
// 4 5
// 3 5
// 2 5*
// 14352

// 1 2 3 4 5 6
// 1 6 3 5 4 2
// 1 2
// 2 1
// 3 2
// 4 2
// 5 2
// 6 2
// 1 3 4 5 6 2
// 1 3
// 3 1
// 4 3
// 1 4 3 5 6 2
// 4 1 
// 1 4
// 3 4
// 5 4
// 6 4
// 1 3 5 6 4 2
// 5 3
// 5 1
// 1 5
// 3 5
// 6 5
// 1 3 6 5 4 2
// 6 3
// 6 1
// 1 6
// 1 6 3 5 4 2

// 6 1
// 1 6
// 3 6 *
// 5 3 
// 5 6 *
// 3 5
// 4 5*
// 2 4*

#include <bits/stdc++.h>
using namespace std;
// #define int long long
#define mod 1000000007
void solve()
{
    int n;
    cin >> n;
    vector<int> a(n + 1);
    map<int, int> mp;
    for (int i = 1; i <= n; i++)
        a[i] = i;
    for (int i = 1; i <= n; i++)
    {
        int x;
        cin >> x;
        mp[x] = i;
    }
    map<int,int> curr;
    for(int i=1;i<=n;i++)
    curr[i]=i;
    int i=1;
    vector<pair<int,int>> ans;
    for(int i=1;i<=n;i++)
    {
        int c = curr[i];
        int d = mp[i];
        for(int j=c-1;j>=1;j--)
        {
            ans.push_back({i,a[j]});
            swap(a[j],a[j+1]);
        }
        for(int j=2;j<=d;j++)
        {
            ans.push_back({a[j],i});
            swap(a[j],a[j-1]);
        }
        for(int i=1;i<=n;i++)
        {
            curr[a[i]]=i;
        }
    }
    // for(auto it:a)
    // cout <<it << " ";
    // cout << endl;
    cout << ans.size() << endl;
    for (auto [x, y] : ans)
    {
        cout << x << " " << y << endl;
    }
}
signed main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
    int test = 1;
    // cin>>test;
    while (test--)
    {
        solve();
    }
    return 0;
}


Submission (verdict: Time limit exceeded on test 29):
#include <bits/stdc++.h>
using namespace std;

struct PairHash {
    template <typename T1, typename T2>
    size_t operator()(const pair<T1, T2>& p) const {
        return hash<T1>()(p.first) ^ (hash<T2>()(p.second) << 1);
    }
};

void solve() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);

    int n; cin >> n;
    vector<int> a(n + 1), mp(n + 1);
    for (int i = 1; i <= n; i++)
        a[i] = i;

    for (int i = 1; i <= n; i++) {
        int x; cin >> x;
        mp[x] = i;
    }

    unordered_set<pair<int, int>, PairHash> st;
    for (int i = 1; i <= n; i++) {
        int shift = mp[a[i]] - i;
        if (shift <= 0) continue;
        int val2 = a[i];
        int pos = i;
        while (shift--) {
            a[pos] = a[pos + 1];
            if (st.find({a[pos + 1], val2}) != st.end()) {
                st.erase({a[pos + 1], val2});
            } else {
                st.insert({val2, a[pos + 1]});
            }
            pos++;
        }
        a[mp[val2]] = val2;
        i--;
    }

    vector<pair<int, int>> ans;
    vector<int> vec(n + 1);
    for (int i = 1; i <= n; i++)
        vec[i] = i;

    for (int i = 2; i <= n; i++) {
        int val = vec[i];
        for (int j = i - 1; j >= 1; j--) {
            ans.push_back({val, vec[j]});
            vec[j + 1] = vec[j];
        }
        vec[1] = val;

        for (int j = 2; j <= i; j++) {
            if (st.find({vec[j], val}) != st.end()) {
                vec[j - 1] = val;
                break;
            }
            ans.push_back({vec[j], val});
            vec[j - 1] = vec[j];
            if (j == i) vec[j] = val;
        }
    }

    cout << (int)ans.size() << "\n";
    for (auto &p : ans) {
        cout << p.first << " " << p.second << "\n";
    }
}

int main() {
    solve();
    return 0;
}