#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:200000000")
using namespace std;
const int INF = (int)1E9;
const long long INF64 = (long long)1E18;
const double EPS = 1E-9;
const double PI = acos((double)0) * 2;
const int MAXN = 110000;
int n, a[MAXN];
bool read() {
  if (!(cin >> n)) return false;
  for (int i = 0; i < int(n); ++i) scanf("%d", &a[i]);
  return true;
}
pair<int, int> b[MAXN];
int p[MAXN];
bool u[MAXN];
bool sorted() {
  for (int i = int(1); i < int(n); ++i)
    if (a[i - 1] > a[i]) return false;
  return true;
}
bool good(int n) {
  while (n) {
    int c = n % 10;
    if (c != 4 && c != 7) return false;
    n /= 10;
  }
  return true;
}
void solve() {
  for (int i = 0; i < int(n); ++i) b[i] = make_pair(a[i], i);
  sort(b, b + n);
  if (sorted()) {
    puts("0");
    return;
  }
  int pos = -1;
  for (int i = 0; i < int(n); ++i)
    if (good(a[i])) pos = i;
  if (pos == -1) {
    puts("-1");
    return;
  }
  for (int i = 0; i < int(n); ++i)
    p[i] = int(lower_bound(b, b + n, make_pair(a[i], i)) - b);
  memset(u, 0, sizeof u);
  vector<pair<int, int> > ans;
  vector<int> my_cycle;
  for (int i = 0; i < int(n); ++i)
    if (!u[i]) {
      vector<int> cycle;
      bool my = false;
      for (int j = i;; j = p[j]) {
        if (u[j]) break;
        u[j] = true;
        cycle.push_back(j);
        if (j == pos) my = true;
      }
      if (my)
        my_cycle = cycle;
      else if (cycle.size() > 1) {
        int cpos = pos;
        for (int j = int(cycle.size()) - 1; j >= 0; --j) {
          ans.push_back(make_pair(cpos, cycle[j]));
          cpos = cycle[j];
        }
        ans.push_back(make_pair(cpos, pos));
      }
    }
  if (my_cycle.size() > 1) {
    rotate(my_cycle.begin(), find(my_cycle.begin(), my_cycle.end(), pos),
           my_cycle.end());
    int cpos = pos;
    for (int i = int(my_cycle.size()) - 1; i >= 0; --i)
      if (i) {
        ans.push_back(make_pair(cpos, my_cycle[i]));
        cpos = my_cycle[i];
      }
  }
  for (int i = 0; i < int(ans.size()); ++i)
    if (!good(a[ans[i].first]) && !good(a[ans[i].second]))
      throw;
    else
      swap(a[ans[i].first], a[ans[i].second]);
  if (!sorted()) throw;
  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);
}
int main() {
  if (!read()) throw;
  solve();
}
