#include <bits/stdc++.h>
using namespace std;
int n, e, nx, fa[100001], son[100001], r[100001], ansp[100001], ans[100001];
bool vis[100001], vis2[100001];
string s;
struct data {
  string s;
  int num, x;
} a[100001], b[100001], pl[100001], pr[100001];
bool cmp(data p, data q) {
  if (p.x < q.x) return 0;
  if (p.x > q.x) return 1;
  return p.num < q.num;
}
int getnum(string s) {
  if (s[0] == '0') return 0;
  int sum = 0;
  int len = s.length();
  for (int i = 0; i < len; i++) {
    if (s[i] < '0' || s[i] > '9') return 0;
    sum *= 10;
    sum = sum + s[i] - 48;
  }
  if (sum > n) return 0;
  return sum;
}
void print1() {
  for (int i = 1; i <= nx / 2; i++) {
    fa[r[i]] = r[i + nx / 2];
    son[r[i + nx / 2]] = r[i];
  }
  for (int i = nx / 2 + 1; i < nx; i++) {
    fa[r[i]] = r[i - nx / 2 + 1];
    son[r[i - nx / 2 + 1]] = r[i];
  }
  fa[r[nx]] = r[1];
  son[r[1]] = r[nx];
  printf("move %d orbit\n", r[1]);
  int now = r[1];
  for (int i = 2; i <= nx; i++) {
    now = son[now];
    printf("move %d %d\n", now, fa[now]);
  }
  printf("move orbit %d\n", fa[r[1]]);
}
void build_graph(int ng, int keyl, int keyr) {
  if (keyl < keyr || (keyl == keyr && nx - ng > keyr)) {
    for (int i = 1; i <= keyl; i++) {
      fa[r[ng + i]] = r[i];
      fa[r[i]] = r[ng + i + 1];
      son[r[i]] = r[ng + i];
      son[r[ng + i + 1]] = r[i];
    }
    for (int j = ng + keyl + 1; j <= ng + keyr; j++) {
      fa[r[j]] = r[j - ng];
      son[r[j - ng]] = r[j];
    }
    return;
  }
  for (int i = 1; i <= keyr; i++) {
    fa[r[i]] = r[ng + i];
    fa[r[ng + i]] = r[i + 1];
    son[r[ng + i]] = r[i];
    son[r[i + 1]] = r[ng + i];
  }
  for (int j = keyr + 1; j <= keyl; j++) {
    fa[r[j]] = r[j + ng];
    son[r[j + ng]] = r[j];
  }
}
void print2() {
  int ng = 0;
  for (int i = 1; i <= e; i++)
    if (!vis[i]) ng++;
  int keyl = 0, keyr = 0;
  for (int i = 1; i <= ng; i++)
    if (b[i].num != 0) keyr++;
  for (int i = ng + 1; i <= nx; i++)
    if (b[i].num != 0) keyl++;
  build_graph(ng, keyl, keyr);
  int pxl = 0, pxr = 0, keylx = 0, keyrx = ng;
  memset(vis, 0, sizeof(vis));
  for (int i = 1; i <= nx; i++) {
    if (b[i].num == 0) {
      if (i <= ng)
        pl[++pxl] = b[i];
      else
        pr[++pxr] = b[i];
      continue;
    }
    if (i > ng)
      ans[r[++keylx]] = b[i].num;
    else
      ans[r[++keyrx]] = b[i].num;
    vis[b[i].num] = 1;
  }
  for (int i = 1; i <= ng; i++)
    if (!vis[r[i]]) ans[r[++keylx]] = r[i];
  for (int i = ng + 1; i <= nx; i++)
    if (!vis[r[i]]) ans[r[++keyrx]] = r[i];
  for (int i = 1; i <= nx; i++)
    if (son[r[i]] == 0) {
      int now = r[i];
      int nowtot = 0;
      while (now) {
        ansp[++nowtot] = ans[now];
        now = fa[now];
      }
      for (int j = nowtot - 1; j >= 1; j--)
        printf("move %d %d\n", ansp[j], ansp[j + 1]);
      printf("move ");
      if (i <= ng) {
        cout << pl[pxl].s;
        pxl--;
      } else {
        cout << pr[pxr].s;
        pxr--;
      }
      printf(" %d\n", ansp[1]);
    }
}
void work() {
  memset(vis, 0, sizeof(vis));
  for (int i = 1; i <= e; i++)
    if (a[i].num && a[i].num <= e) {
      vis[i] = 1;
      vis2[a[i].num] = 1;
    }
  for (int i = e + 1; i <= n; i++)
    if (a[i].num > e) {
      vis[i] = 1;
      vis2[a[i].num] = 1;
    }
  nx = 0;
  for (int i = 1; i <= n; i++)
    if (!vis[i]) b[++nx] = a[i];
  if (nx == 0) {
    printf("0\n");
    return;
  }
  bool judge = 1;
  for (int i = 1; i <= nx; i++)
    if (b[i].num == 0) {
      judge = 0;
      break;
    }
  int nownx = 0;
  for (int i = 1; i <= n; i++)
    if (!vis2[i]) r[++nownx] = i;
  if (judge) {
    printf("%d\n", nx + 1);
    print1();
  } else {
    printf("%d\n", nx);
    print2();
  }
}
int main() {
  scanf("%d", &n);
  e = 0;
  for (int i = 1; i <= n; i++) {
    cin >> s;
    int num = getnum(s);
    a[i].s = s;
    scanf("%d", &a[i].x);
    a[i].num = num;
    if (a[i].x == 1) e++;
  }
  sort(a + 1, a + n + 1, cmp);
  work();
  return 0;
}
