func_code_string: #include <bits/stdc++.h>   using namespace std;   int arr[100000];   int n;   priority_queue<pair<int, int>, vector<pair<int, int> >,                  greater<pair<int, int> > >       q;   int rankHash[100000];   int indHash[100000];   vector<pair<int, int> > ans;   int main(void) {     scanf( %d , &n);     for (int i = 0; i < n; i++) scanf( %d , arr + i);     bool isSorted = true;     int lucky = -1;     for (int i = 0; i < n - 1; i++) {       if (arr[i + 1] < arr[i]) {         isSorted = false;         break;       }     }     if (isSorted) {       printf( 0 n );       return 0;     }     for (int i = 0; i < n; i++) {       int tar = arr[i];       bool isLucky = true;       while (tar) {         if (tar % 10 != 4 && tar % 10 != 7) {           isLucky = false;           break;         }         tar /= 10;       }       if (isLucky) {         lucky = i;         break;       }     }     if (lucky == -1) {       printf( -1 n );       return 0;     }     for (int i = 0; i < n; i++) q.push(make_pair(arr[i], i));     for (int i = 0; i < n; i++) {       rankHash[i] = q.top().second;       q.pop();     }     for (int i = 0; i < n; i++) indHash[rankHash[i]] = i;     for (int i = 0; i < n; i++) {       if (i != lucky) {         ans.push_back(make_pair(i + 1, lucky + 1));         rankHash[indHash[i]] = lucky;         rankHash[indHash[lucky]] = i;         swap(indHash[i], indHash[lucky]);         lucky = i;       }       if (lucky != rankHash[i]) {         ans.push_back(make_pair(lucky + 1, rankHash[i] + 1));         int r1 = i;         int r2 = indHash[lucky];         int i1 = rankHash[r1];         int i2 = rankHash[r2];         rankHash[r2] = i1;         rankHash[r1] = lucky;         swap(indHash[i1], indHash[i2]);         lucky = i1;       }     }     printf( %d n , (int)ans.size());     for (int i = 0; i < ans.size(); i++)       printf( %d %d n , ans[i].first, ans[i].second);     return 0;   }   