#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e5 + 5;
int a[maxn], from[maxn], to[maxn];
struct Node {
  int v, pos;
} b[maxn];
struct Nt {
  int x, from;
} v[maxn];
inline bool cmp(Node a, Node b) {
  return a.v < b.v || (a.v == b.v && a.pos < b.pos);
}
vector<pair<int, int> > ans;
inline bool lucky(int x) {
  int t;
  while (x) {
    t = x % 10;
    if (t != 4 && t != 7) return 0;
    x /= 10;
  }
  return 1;
}
inline int Lucky(int n) {
  for (int i = 0; i < n; ++i)
    if (lucky(b[i].v)) return b[i].pos;
  return -1;
}
int main() {
  int n;
  scanf("%d", &n);
  for (int i = 0; i < n; ++i) {
    scanf("%d", a + i);
    b[i].pos = i;
    b[i].v = a[i];
  }
  sort(b, b + n, cmp);
  for (int i = 0; i < n; ++i) {
    from[i] = b[i].pos;
    to[b[i].pos] = i;
  }
  bool ok = 1;
  for (int i = 0; i < n; ++i)
    if (from[i] != i) {
      ok = 0;
      break;
    }
  if (ok) {
    puts("0");
    return 0;
  }
  int idx = Lucky(n);
  if (idx == -1) {
    puts("-1");
    return 0;
  }
  for (int i = 0; i < n; ++i) {
    if (from[i] == i) continue;
    int j = from[i];
    if (lucky(a[i]) || lucky(a[j])) {
      ans.push_back(make_pair(i + 1, j + 1));
      swap(a[i], a[j]);
      swap(to[i], to[j]);
      from[to[i]] = i;
      from[to[j]] = j;
      if (idx == i)
        idx = j;
      else if (idx == j)
        idx = i;
    } else {
      ans.push_back(make_pair(i + 1, idx + 1));
      ans.push_back(make_pair(i + 1, j + 1));
      swap(a[i], a[j]);
      swap(to[i], to[j]);
      swap(a[j], a[idx]);
      swap(to[j], to[idx]);
      from[to[j]] = j;
      from[to[i]] = i;
      from[to[idx]] = idx;
      idx = j;
    }
  }
  printf("%d\n", ans.size());
  for (int i = 0; i < (int)ans.size(); ++i)
    printf("%d %d\n", ans[i].first, ans[i].second);
  return 0;
}
