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

Previous submission (verdict: Wrong answer on test 4):
#include <bits/stdc++.h>
using namespace std;

#define ll long long 
#define ull unsigned long long
#define lld long double
#define pii pair<int,int>
#define pll pair<ll,ll>
 
#define fastio() ios_base::sync_with_stdio(false);cin.tie(NULL);
#define vi vector<int>
#define iinf (int)2e9
#define eb emplace_back
#define vb vector<bool>
#define vll vector<ll> 
#define vvll vector<vll>
#define vpll vector<pll>
#define vpii vector<pii>
#define vvi vector<vector<int>>
#define vvb vector<vector<bool>>
#define vc vector<char>
#define vvc vector<vector<char>>
#define nline cout<<"\n";
#define pb push_back
#define pf push_front
#define ppb pop_back
#define ppf pop_front
#define mp make_pair
#define fs first
#define sc second
#define PI 3.141592653589793238462
#define set_bits __builtin_popcountll
#define sz(x) ((int)(x).size())
#define all(x) (x).begin(), (x).end()
#define rall(x) (x).rbegin(), (x).rend()
#define rep(i, x, y) for(int i=x; i<y; i++)
#define repp(i, x, y) for(int i=x; i<=y; i++)
 
#define print(k) {for(auto v : k){cout << v << " ";} cout << endl;}
 
#define fi first
#define se second
#define mp make_pair
 
#define yes cout << "YES" << endl;
#define no cout << "NO" << endl;

/* =================================================== */

const int MOD = 1e9 + 7;
const int inf = 1e9;
const ll llinf = (ll)1e18;


void solve() {
    int n ;cin>>n;
    vi final(n); 
    rep(i, 0, n) cin>>final[i];
    
    set<pii> s;
    vpii ans;

    vi initial(n); 
    rep(i, 0, n) initial[i] = i+1;

    rep(i, 0, n) {
        if(initial[i] == final[i]) continue;
        rep(j, i, n){
            if(initial[j] == final[i]) {
                swap(initial[i], initial[j]); 
                s.insert(mp(initial[i], initial[j])); 
                s.insert(mp(initial[j], initial[i]));
                ans.pb(mp(initial[i], initial[j]));
                break;
            }
        }
    }

    repp(i, 1, n) {
        repp(j, 1, n){
            if(i == j) continue;

            if(s.find(mp(i, j)) != s.end()){
                continue;
            }
            else {
                repp(tt, 1, n){
                    if(tt == i){
                        ans.pb(mp(j, i));
                        ans.pb(mp(i, j));
                        break;
                    }
                    if(tt == j){
                        ans.pb(mp(i, j));
                        ans.pb(mp(j, i));
                        break;
                    }
                }
                
                s.insert(mp(i, j));
                s.insert(mp(j, i));
            }

        }
    }

    cout<<ans.size()<<endl;
    for(auto it:ans){
        cout<<it.fi<<" "<<it.se<<endl;
    }

}

int main() {
    fastio()
    // int t;cin>>t;
    int t=1;
    while(t--) solve();

    return 0;
}


Submission (verdict: Accepted):
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;


int main()
{
    ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);

    vector<pair<int,int>> ans;
    int n;
    cin>>n;


    vector<int> v(n);
    for (int i = 0; i < n; i++)
    {
        cin>>v[i];
    }

    vector<bool> temp(n+1,true);
    for (int i = 0; i < n; i++)
    {
        temp[v[i]]=false;
        for (int j = v[i]+1; j <= n; j++)
        {
            if(temp[j]==true){
                ans.push_back({j,v[i]});
            }
        }
        for (int j = n; j >=1; j--)
        {
            if(temp[j]==true){
                ans.push_back({v[i],j});
            }
        }

        
    }
    



    // int l=0;
    // int h=0;
    // for (int i = 1; i < n; i++)
    // {
    //     if(v[i-1]+1==v[i]){
    //         h=i;
    //     }
    //     else{
    //         int min=v[l];
    //         int max=v[h];
    //         for(int j=min+1;j<=max;j++){
    //             for (int k = min; k < j; k++)
    //             {
    //                 ans.push_back({j,k});
    //             }
    //         }
    //         for(int j=max-1;j>=min;j--){
    //             for (int k = max; k > j; k--)
    //             {
    //                 ans.push_back({j,k});
    //             }
    //         }
    //         l=i;
    //         h=i;

    //     }
    // }
    // int min=v[l];
    // int max=v[h];
    // for(int j=min+1;j<=max;j++){
    //     for (int k = min; k < j; k++)
    //     {
    //         ans.push_back({j,k});
    //     }
    // }
    // for(int j=max-1;j>=min;j--){
    //     for (int k = max; k > j; k--)
    //     {
    //         ans.push_back({j,k});
    //     }
    // }

    // vector<bool> temparray(n+1,true);
    // for (int i = 0; i < n; i++)
    // {
    //     if(temparray[v[i]]==true){
    //         temparray[v[i]]=false;
    //         int num=v[i]+1;
    //         for(int j=i+1;j<n;j++){
    //             if(v[j]==num){
    //                 temparray[v[j]]=false;
    //                 num++;
    //             }
    //         }
    //         num--;

    //         int min=v[i];
    //         int max=num;
    //         for(int j=min+1;j<=max;j++){
    //             for (int k = min; k < j; k++)
    //             {
    //                 ans.push_back({j,k});
    //             }
    //         }
    //         for(int j=max-1;j>=min;j--){
    //             for (int k = max; k > j; k--)
    //             {
    //                 ans.push_back({j,k});
    //             }
    //         }



    //     }
        // int num=v[i];

        // for(int j=0;j<i;j++){
        //     if(v[j]<num){
        //         temp[v[j]]=false;
        //     }
        // }

        // for (int j = 1; j < num; j++)
        // {
        //     if(temp[j]==true){
        //         ans.push_back({num,j});
        //     }
        // }

    // }


    // for (int i = 0; i < n; i++)
    // {
    //     int num=v[i];
    //     vector<bool> temp(num,true);
    //     for(int j=0;j<i;j++){
    //         if(v[j]<num){
    //             temp[v[j]]=false;
    //         }
    //     }

    //     for (int j = num-1; j >=1; j--)
    //     {
    //         if(temp[j]==true){
    //             ans.push_back({num,j});
    //         }
    //     }

    // }

    cout<<ans.size()<<endl;
    for(int i=0;i<ans.size();i++){
        cout<<ans[i].first<<" "<<ans[i].second<<endl;
    }
    
    
    
    
        
    return 0;
}