#include <bits/stdc++.h>
using namespace std;
int nextInt() {
  int tmp = 0;
  scanf("%d", &tmp);
  return tmp;
}
bool type(int w) {
  if (w == 0) {
    return true;
  }
  if (w % 10 == 4 || w % 10 == 7) {
    return type(w / 10);
  }
  return false;
}
map<pair<int, int>, int> pos;
bool type_(const pair<int, int>& p) { return type(p.first); }
void swap_(pair<int, int>& a, pair<int, int>& b, int ia, int ib) {
  pos[a] = ib;
  pos[b] = ia;
  pair<int, int> tmp = a;
  a = b;
  b = tmp;
}
int main() {
  int n = nextInt();
  vector<pair<int, int> > a;
  vector<pair<int, int> > s;
  bool hasLuck = false;
  for (int i = 0; i < n; ++i) {
    a.push_back(make_pair(nextInt(), i));
    pos[a.back()] = i;
    s.push_back(a.back());
    hasLuck |= type(a.back().first);
  }
  sort(s.begin(), s.end());
  if (equal(a.begin(), a.end(), s.begin())) {
    printf("0\n");
    return 0;
  }
  if (!hasLuck) {
    printf("-1\n");
    return 0;
  }
  int pl = 0;
  for (int i = 0; i < (int)a.size(); ++i) {
    if (type(a[i].first)) {
      pl = i;
    }
  }
  vector<pair<int, int> > sol;
  for (int i = 0; i < n; ++i) {
    if (a[i] != s[i]) {
      if (pl != i) {
        sol.push_back(make_pair(i, pl));
        swap_(a[i], a[pl], i, pl);
        pl = i;
      }
      int newp = pos[s[i]];
      if (newp != pl) {
        sol.push_back(make_pair(newp, pl));
        swap_(a[pl], a[newp], pl, newp);
        pl = newp;
      }
    }
  }
  printf("%d\n", (int)sol.size());
  for (int i = 0; i < (int)sol.size(); ++i) {
    printf("%d %d\n", sol[i].first + 1, sol[i].second + 1);
  }
  return 0;
}
