#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 100;
struct node {
  int x, y;
} f[2 * N];
int n, pos, vt[N], a[N], b[N], dd[N];
vector<pair<int, int> > vec;
bool check(int x) {
  if (x == 0) return 0;
  while (x) {
    if (x % 10 != 7 && x % 10 != 4) return 0;
    x /= 10;
  }
  return 1;
}
int cnt = 0;
int main() {
  scanf("%d", &n);
  pos = -1;
  for (int i = 1; i <= n; ++i) scanf("%d", &a[i]), vec.push_back({a[i], i});
  bool ok = 0;
  for (int i = 1; i < n; ++i) {
    if (a[i + 1] < a[i]) {
      ok = 1;
      break;
    }
  }
  if (!ok) {
    printf("0");
    return 0;
  }
  sort(vec.begin(), vec.end());
  for (int i = 1; i <= n; ++i) {
    if (check(a[i])) pos = i;
    a[i] = b[i] = lower_bound(vec.begin(), vec.end(), pair<int, int>(a[i], i)) -
                  vec.begin();
    vt[a[i]] = i;
  }
  if (pos == -1) {
    printf("-1");
    return 0;
  }
  int x;
  dd[b[pos]] = 1;
  sort(b + 1, b + n + 1);
  for (int i = 1; i <= n; ++i) {
    if (dd[b[i]]) continue;
    x = vt[b[i]];
    if (x == i) continue;
    if (i != pos) {
      vt[a[pos]] = i;
      vt[a[i]] = pos;
      swap(a[i], a[pos]);
      f[++cnt] = {pos, i};
      pos = i;
    }
    if (x != pos) {
      vt[a[pos]] = x;
      vt[a[x]] = pos;
      swap(a[x], a[pos]);
      f[++cnt] = {pos, x};
      pos = x;
    }
  }
  printf("%d\n", cnt);
  for (int i = 1; i <= cnt; ++i) {
    printf("%d %d\n", f[i].x, f[i].y);
  }
  return 0;
}
