#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:67108864")
using namespace std;
const int inf = 1000000000;
int n;
pair<int, int> ar[100009], br[100009];
int pos[100009], to[100009], u[100009];
bool Good(int x) {
  while (x) {
    if (x % 10 != 4 && x % 10 != 7) return 0;
    x /= 10;
  }
  return 1;
}
vector<pair<int, int> > res;
void Go(int pos) {
  vector<pair<int, int> > tres;
  while (!u[pos]) {
    tres.push_back(make_pair(pos, to[pos]));
    u[pos] = 1;
    pos = to[pos];
  }
  reverse(tres.begin(), tres.end());
  res.insert(res.end(), tres.begin(), tres.end() - 1);
}
map<pair<int, int>, int> mp;
int main() {
  scanf("%d", &n);
  for (int i = 0; i < n; i++) {
    scanf("%d", &ar[i].first);
    ar[i].second = i;
  }
  int C = 0;
  for (int i = 0; i < n; i++) {
    if (Good(ar[i].first)) {
      pos[i] = 1;
      C++;
    }
  }
  for (int i = 0; i < n; i++) br[i] = ar[i];
  sort(br, br + n);
  for (int i = 0; i < n; i++) mp[br[i]] = i;
  for (int i = 0; i < n; i++) to[i] = mp[ar[i]];
  int P = 0;
  for (int i = 0; i < n; i++) {
    if (to[i] == i) {
      u[i] = 1;
      P++;
    }
    if (!u[i] && pos[i]) Go(i);
  }
  if (C == 0 && P == n) {
    printf("0");
    return 0;
  }
  if (!C) {
    printf("-1");
    return 0;
  }
  for (int i = 0; i < res.size(); i++) {
    swap(ar[res[i].first], ar[res[i].second]);
  }
  int q = 0;
  for (int i = 0; i < n; i++) {
    if (Good(ar[i].first)) {
      q = i;
      break;
    }
  }
  for (int i = 0; i < n; i++) {
    if (u[i]) continue;
    if (to[i] == i) {
      u[i] = 1;
      continue;
    }
    int t = to[i];
    to[q] = t;
    to[i] = q;
    u[q] = 0;
    swap(ar[i], ar[q]);
    res.push_back(make_pair(i, q));
    Go(i);
  }
  printf("%d\n", res.size());
  for (int i = 0; i < res.size(); i++) {
    printf("%d %d\n", res[i].first + 1, res[i].second + 1);
  }
  return 0;
}
