#include <bits/stdc++.h>
using namespace std;
int n, t[100005], ind[100005], ne;
char s[100005][8];
bool occupied[100005];
vector<int> trash[2], asdfdsagla[2];
set<int> space[2];
int find(char s[8]) {
  int l = strlen(s);
  for (int i = (0); i < (l); i++)
    if (s[i] < '0' || s[i] > '9') return -1;
  int ret = 0;
  for (int i = (0); i < (l); i++) ret = ret * 10 + s[i] - '0';
  if (s[0] < '1' || s[0] > '9') return -1;
  if (ret < 1 || ret > n) return -1;
  return ret;
}
int main() {
  scanf("%d", &n);
  for (int i = (0); i < (n); i++) {
    scanf("%s %d", s[i], &t[i]);
    ind[i] = find(s[i]);
    if (ind[i] < 0) trash[t[i]].push_back(i);
    ne += t[i];
  }
  for (int i = (0); i < (n); i++) {
    if (ind[i] > -1) {
      if (t[i]) {
        occupied[ind[i]] = 1;
        if (ind[i] > ne) asdfdsagla[1].push_back(i);
      } else {
        occupied[ind[i]] = 1;
        if (ind[i] <= ne) asdfdsagla[0].push_back(i);
      }
    }
  }
  for (int i = (1); i <= (n); i++)
    if (!occupied[i]) {
      if (i <= ne)
        space[1].insert(i);
      else
        space[0].insert(i);
    }
  if (trash[0].size() + trash[1].size() == 0) {
    int mv = asdfdsagla[0].size() + asdfdsagla[1].size();
    if (mv)
      printf("%d\n", mv + 1);
    else {
      puts("0");
      return 0;
    }
    if (asdfdsagla[0].size() != asdfdsagla[1].size())
      printf("%d %d\n", asdfdsagla[0].size(), asdfdsagla[1].size());
    int alone = asdfdsagla[0][0];
    printf("move %d %d\n", ind[alone], 0);
    printf("move %d %d\n", ind[asdfdsagla[1][0]], ind[alone]);
    int last = ind[asdfdsagla[1][0]];
    for (int i = (1); i < (asdfdsagla[0].size()); i++) {
      printf("move %d %d\n", ind[asdfdsagla[0][i]], last);
      printf("move %d %d\n", ind[asdfdsagla[1][i]], ind[asdfdsagla[0][i]]);
      last = ind[asdfdsagla[1][i]];
    }
    printf("move %d %d\n", 0, last);
  } else {
    printf("%d\n", asdfdsagla[0].size() + asdfdsagla[1].size() +
                       trash[0].size() + trash[1].size());
    int cnt = asdfdsagla[0].size() + asdfdsagla[1].size();
    int ptr[2];
    ptr[0] = ptr[1] = 0;
    for (int i = (0); i < (cnt); i++) {
      if (space[1].size() && ptr[1] < asdfdsagla[1].size()) {
        printf("move %d %d\n", ind[asdfdsagla[1][ptr[1]]], *space[1].begin());
        space[1].erase(*space[1].begin());
        space[0].insert(ind[asdfdsagla[1][ptr[1]]]);
        ptr[1]++;
      } else {
        printf("move %d %d\n", ind[asdfdsagla[0][ptr[0]]], *space[0].begin());
        space[0].erase(*space[0].begin());
        space[1].insert(ind[asdfdsagla[0][ptr[0]]]);
        ptr[0]++;
      }
    }
    for (int i = (0); i < (trash[0].size()); i++) {
      printf("move %s %d\n", s[trash[0][i]], *space[0].begin());
      space[0].erase(*space[0].begin());
    }
    for (int i = (0); i < (trash[1].size()); i++) {
      printf("move %s %d\n", s[trash[1][i]], *space[1].begin());
      space[1].erase(*space[1].begin());
    }
  }
}
