func_code_string: #include <bits/stdc++.h>   using namespace std;   const int N = 1e5 + 100;   struct node {     int x, y;   } f[2 * N];   int n, pos, vt[N], a[N], b[N], dd[N];   vector<pair<int, int> > vec;   bool check(int x) {     if (x == 0) return 0;     while (x) {       if (x % 10 != 7 && x % 10 != 4) return 0;       x /= 10;     }     return 1;   }   int cnt = 0;   int main() {     scanf( %d , &n);     pos = -1;     for (int i = 1; i <= n; ++i) scanf( %d , &a[i]), vec.push_back({a[i], i});     bool ok = 0;     for (int i = 1; i < n; ++i) {       if (a[i + 1] < a[i]) {         ok = 1;         break;       }     }     if (!ok) {       printf( 0 );       return 0;     }     sort(vec.begin(), vec.end());     for (int i = 1; i <= n; ++i) {       if (check(a[i])) pos = i;       a[i] = b[i] = lower_bound(vec.begin(), vec.end(), pair<int, int>(a[i], i)) -                     vec.begin();       vt[a[i]] = i;     }     if (pos == -1) {       printf( -1 );       return 0;     }     int x;     dd[b[pos]] = 1;     sort(b + 1, b + n + 1);     for (int i = 1; i <= n; ++i) {       if (dd[b[i]]) continue;       x = vt[b[i]];       if (x == i) continue;       if (i != pos) {         vt[a[pos]] = i;         vt[a[i]] = pos;         swap(a[i], a[pos]);         f[++cnt] = {pos, i};         pos = i;       }       if (x != pos) {         vt[a[pos]] = x;         vt[a[x]] = pos;         swap(a[x], a[pos]);         f[++cnt] = {pos, x};         pos = x;       }     }     printf( %d n , cnt);     for (int i = 1; i <= cnt; ++i) {       printf( %d %d n , f[i].x, f[i].y);     }     return 0;   }   