#include <bits/stdc++.h>
using namespace std;
struct inp {
  int a, i;
  bool operator<(const inp &t) const { return a < t.a; }
} r[100005];
struct data {
  int a, l;
} a[100005];
int n, q[100005], qw, sol[200005][2], ans;
bool b[100005];
int luc(int a) {
  while (a) {
    int b = a % 10;
    if (b != 4 && b != 7) return 0;
    a /= 10;
  }
  return 1;
}
bool sorted() {
  for (int i = 1; i < n; ++i) {
    if (r[i].a > r[i + 1].a) return false;
  }
  return true;
}
bool noL() {
  for (int i = 1; i <= n; ++i) {
    if (a[i].l) return false;
  }
  return true;
}
void adds(int x, int y) {
  sol[ans][0] = x;
  sol[ans][1] = y;
  ans++;
  swap(a[x], a[y]);
}
int main() {
  scanf("%d", &n);
  for (int i = 1; i <= n; ++i) {
    scanf("%d", &r[i].a);
    r[i].i = i;
  }
  if (sorted()) {
    printf("0\n");
    return 0;
  }
  sort(r + 1, r + 1 + n);
  for (int i = 1; i <= n; ++i) {
    a[r[i].i].a = i;
    a[r[i].i].l = luc(r[i].a);
  }
  if (noL()) {
    printf("-1\n");
    return 0;
  }
  ans = 0;
  memset(b, true, sizeof(b));
  for (int i = 1; i <= n; ++i) {
    if (b[i] && a[i].a != i) {
      int idx = -1;
      qw = 0;
      for (int j = i; b[j]; j = a[j].a) {
        b[j] = false;
        if (a[j].l) idx = qw;
        q[qw++] = j;
      }
      q[qw] = q[0];
      if (idx != -1) {
        for (int j = idx; j > 0; --j) {
          adds(q[j - 1], q[j]);
        }
        for (int j = qw - 1; j > idx; --j) {
          adds(q[j], q[j + 1]);
        }
      }
    }
  }
  int tmp = -1;
  for (int i = 1; i <= n; ++i) {
    if (a[i].l) {
      tmp = i;
      break;
    }
  }
  memset(b, true, sizeof(b));
  for (int i = 1; i <= n; ++i) {
    if (b[i] && a[i].a != i) {
      qw = 0;
      for (int j = i; b[j]; j = a[j].a) {
        b[j] = false;
        q[qw++] = j;
      }
      q[qw] = tmp;
      for (int j = qw - 1; j >= 0; --j) {
        adds(q[j], q[j + 1]);
      }
      adds(q[qw], q[0]);
    }
  }
  printf("%d\n", ans);
  for (int i = 0; i < ans; ++i) {
    printf("%d %d\n", sol[i][0], sol[i][1]);
  }
  return 0;
}
