#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:64000000")
using namespace std;
int p10[10];
int k;
int a[1500];
int n;
int b[100005], c[100005];
map<int, vector<int> > pm;
int pos[100005], where[100005];
bool lucky(int x) { return binary_search(a, a + k, x); }
vector<pair<int, int> > ans;
bool sorted() {
  for (int i = 0; i < int(n - 1); i++) {
    if (b[i] > b[i + 1]) return false;
  }
  return true;
}
void Swap(int i, int& j) {
  assert(i != j);
  ans.push_back(make_pair(i, j));
  swap(b[i], b[j]);
  swap(pos[i], pos[j]);
  where[pos[i]] = i;
  where[pos[j]] = j;
  j = i;
}
int main() {
  p10[0] = 1;
  for (int i = 1; i <= int(9); i++) p10[i] = p10[i - 1] * 10;
  for (int len = 1; len <= int(9); len++) {
    for (int mask = 0; mask < int((1 << len)); mask++) {
      int r = 0;
      for (int i = 0; i < int(len); i++) {
        if (mask & (1 << i)) {
          r += p10[i] * 7;
        } else {
          r += p10[i] * 4;
        }
      }
      a[k++] = r;
    }
  }
  scanf("%d", &n);
  for (int i = 0; i < int(n); i++) {
    scanf("%d", &b[i]);
  }
  for (int i = 0; i < int(n); i++) c[i] = b[i];
  sort(c, c + n);
  for (int i = n - 1; i >= 0; i--) {
    pm[c[i]].push_back(i);
  }
  for (int i = 0; i < int(n); i++) {
    pos[i] = pm[b[i]].back();
    pm[b[i]].pop_back();
    where[pos[i]] = i;
  }
  int id = -1;
  for (int i = 0; i < int(n); i++) {
    if (lucky(b[i])) {
      id = i;
      break;
    }
  }
  if (id == -1) {
    if (sorted()) {
      printf("0\n");
    } else {
      printf("-1\n");
    }
    return 0;
  }
  for (int i = 0; i < int(n); i++) {
    while (where[id] != id) {
      Swap(where[id], id);
    }
    if (pos[i] == i) continue;
    Swap(i, id);
  }
  assert(ans.size() <= 2 * n);
  assert(sorted());
  printf("%d\n", ans.size());
  for (int i = 0; i < int(ans.size()); i++) {
    printf("%d %d\n", ans[i].first + 1, ans[i].second + 1);
  }
  return 0;
}
