#include <bits/stdc++.h>
using namespace std;
int n, a[1000005], Poz[1000005];
vector<int> L[1000005];
vector<pair<int, int> > sol;
struct el {
  int val, poz;
  bool operator<(const el A) const { return val < A.val; }
} v[1000005];
inline int Bun(int x) {
  while (x) {
    if (x % 10 != 4 && x % 10 != 7) return 0;
    x /= 10;
  }
  return 1;
}
int main() {
  int i, j, p = 0, val = 0;
  cin.sync_with_stdio(0);
  cin >> n;
  for (i = 1; i <= n; ++i) {
    cin >> v[i].val;
    v[i].poz = i;
    if (Bun(v[i].val)) p = i;
  }
  int okk = 1;
  for (i = 2; i <= n; ++i)
    if (v[i].val < v[i - 1].val) okk = 0;
  if (okk) {
    cout << 0;
    return 0;
  }
  if (!p) {
    cout << -1;
    return 0;
  }
  sort(v + 1, v + n + 1);
  a[v[1].poz] = 1;
  for (i = 2; i <= n; ++i) {
    a[v[i].poz] = a[v[i - 1].poz];
    if (v[i].val > v[i - 1].val) ++a[v[i].poz];
  }
  for (i = 1; i <= n; ++i) L[a[i]].push_back(i);
  for (i = 1; i <= n; ++i)
    for (auto it : L[i]) a[it] = ++val;
  int cp = a[p];
  for (i = 1; i <= n; ++i) Poz[a[i]] = i;
  for (i = 1; i <= n; ++i) {
    if (i == cp || Poz[i] == i) continue;
    if (p != i) {
      sol.push_back(make_pair(p, i));
      Poz[a[i]] = p;
      Poz[a[p]] = i;
      swap(a[i], a[p]);
      p = i;
    }
    if (p != Poz[i]) {
      int kkt = Poz[i];
      sol.push_back(make_pair(p, Poz[i]));
      Poz[a[Poz[i]]] = p;
      Poz[a[p]] = i;
      swap(a[Poz[i]], a[p]);
      p = kkt;
    }
  }
  cout << sol.size() << "\n";
  for (auto it : sol) cout << it.first << " " << it.second << "\n";
  return 0;
}
