func_code_string: #include <bits/stdc++.h>   using namespace std;   const double PI = 3.1415926535897932384626433832795;   const double EPS = 1e-9;   set<int> good;   void gen(int x) {     good.insert(x);     if (x > 100 * 1000 * 1000) {       return;     }     gen(10 * x + 4);     gen(10 * x + 7);   }   vector<pair<int, int> > swaps;   void addSwap(int i, int j) {     if (i != j) {       swaps.push_back(pair<int, int>(i, j));     }   }   bool fail;   vector<pair<int, int> > solve(const vector<int>& seq____) {     vector<int> seq = seq____;     swaps.clear();     fail = false;     int where_good = -1;     int n = seq.size();     bool sorted = true;     for (int i = 0; i < n; ++i) {       if (i > 0 && seq[i] < seq[i - 1]) {         sorted = false;       }       if (good.count(seq[i])) {         where_good = i;       }     }     if (where_good == -1) {       if (!sorted) {         fail = true;       }       return swaps;     }     int goodNumber = seq[where_good];     int amountLess = 0;     for (int i = 0; i < n; ++i) {       if (seq[i] < goodNumber) {         ++amountLess;       }     }     vector<int> positions;     for (int i = 0; i < n; ++i) {       if (i != amountLess) {         positions.push_back(i);       }     }     set<pair<int, int> > unsorted;     for (int i = 0; i < n; ++i) {       if (i == where_good) {         continue;       }       unsorted.insert(pair<int, int>(seq[i], i));     }     int idInPositions = 0;     while (!unsorted.empty()) {       pair<int, int> cur = *unsorted.begin();       unsorted.erase(unsorted.begin());       if (cur.second == positions[idInPositions]) {         ++idInPositions;         continue;       }       int firstSwapPosition = positions[idInPositions];       bool firstErased = unsorted.count(           pair<int, int>(seq[firstSwapPosition], firstSwapPosition));       unsorted.erase(pair<int, int>(seq[firstSwapPosition], firstSwapPosition));       swap(seq[where_good], seq[firstSwapPosition]);       if (firstErased) {         unsorted.insert(pair<int, int>(seq[where_good], where_good));       }       addSwap(where_good, positions[idInPositions]);       where_good = firstSwapPosition;       int secondSwapPosition = cur.second;       bool secondErased = unsorted.count(           pair<int, int>(seq[secondSwapPosition], secondSwapPosition));       unsorted.erase(pair<int, int>(seq[secondSwapPosition], secondSwapPosition));       swap(seq[where_good], seq[secondSwapPosition]);       if (secondErased) {         unsorted.insert(pair<int, int>(seq[where_good], where_good));       }       addSwap(where_good, secondSwapPosition);       where_good = secondSwapPosition;       ++idInPositions;     }     return swaps;   }   int main() {     int n;     gen(4);     gen(7);     while (cin >> n) {       vector<int> seq(n);       for (int i = 0; i < seq.size(); ++i) {         scanf( %d , &seq[i]);       }       vector<pair<int, int> > res = solve(seq);       if (fail) {         cout << -1 << endl;       } else {         cout << res.size() << endl;         for (int i = 0; i < res.size(); ++i) {           printf( %d %d n , res[i].first + 1, res[i].second + 1);         }       }       cout << endl;     }     return 0;   }   