#include <bits/stdc++.h>
using namespace std;
const string newname = "fejlrc";
const int maxn = 1e5 + 10;
struct Item {
  string name;
  int po;
};
queue<Item> wait[4];
queue<int> pos[2];
vector<string> tempname;
vector<int> temptype;
bool ocp[maxn];
int n, expnum, ans;
int analyse(string &name) {
  int len = name.size();
  if (name[0] == '0') return 0;
  for (int i = 0; i < len; i++) {
    if (name[i] < '0' || name[i] > '9') return 0;
  }
  int ret = 0;
  for (int i = 0; i < len; i++) {
    ret = ret * 10 + (name[i] - '0');
  }
  if (ret > n) return 0;
  return ret;
}
int main() {
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) {
    string name;
    int type;
    cin >> name >> type;
    if (type == 1) ++expnum;
    tempname.push_back(name);
    temptype.push_back(type);
  }
  for (int i = 0; i < n; i++) {
    int temppos = analyse(tempname[i]);
    if (temppos != 0) {
      ocp[temppos] = true;
      if (temppos <= expnum) {
        if (temptype[i] == 0) {
          wait[0].push({tempname[i], temppos});
        }
      } else {
        if (temptype[i] == 1) {
          wait[1].push({tempname[i], temppos});
        }
      }
    } else {
      if (temptype[i] == 0) {
        wait[3].push({tempname[i], 0});
      } else {
        wait[2].push({tempname[i], 1});
      }
    }
  }
  for (int i = 1; i <= n; i++)
    if (!ocp[i]) {
      if (i <= expnum) {
        pos[1].push(i);
      }
      if (i > expnum) {
        pos[0].push(i);
      }
    }
  if ((!(wait[0].empty() && wait[1].empty())) &&
      !((!wait[1].empty()) && (!pos[1].empty())) &&
      !((!wait[0].empty()) && (!pos[0].empty()))) {
    ++ans;
  }
  for (int i = 0; i < 4; i++) {
    ans += wait[i].size();
  }
  printf("%d\n", ans);
  while (!(wait[0].empty() && wait[1].empty())) {
    if ((!wait[0].empty()) && (!pos[0].empty())) {
      Item u = wait[0].front();
      wait[0].pop();
      int p = pos[0].front();
      pos[0].pop();
      printf("move ");
      cout << u.name;
      printf(" %d\n", p);
      pos[1].push(u.po);
    } else if ((!wait[1].empty()) && (!pos[1].empty())) {
      Item u = wait[1].front();
      wait[1].pop();
      int p = pos[1].front();
      pos[1].pop();
      printf("move ");
      cout << u.name;
      printf(" %d\n", p);
      pos[0].push(u.po);
    } else {
      Item u = wait[1].front();
      wait[1].pop();
      printf("move ");
      cout << u.name << " " << newname << endl;
      wait[2].push({newname, 0});
      pos[0].push(u.po);
    }
  }
  while ((!wait[2].empty()) && (!pos[1].empty())) {
    Item u = wait[2].front();
    wait[2].pop();
    int p = pos[1].front();
    pos[1].pop();
    printf("move ");
    cout << u.name;
    printf(" %d\n", p);
  }
  while ((!wait[3].empty()) && (!pos[0].empty())) {
    Item u = wait[3].front();
    wait[3].pop();
    int p = pos[0].front();
    pos[0].pop();
    printf("move ");
    cout << u.name;
    printf(" %d\n", p);
  }
}
