#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 7;
int n, e, val[N], type[N];
bool empty[N];
string name[N];
vector<pair<int, int> > ans;
inline int get(const string &str) {
  int x = 0;
  for (int i = (0); i < (((int)(str).size())); ++i) {
    if (!isdigit(str[i])) return -1;
    int v = str[i] - '0';
    if (i > 0 && x == 0 && v > 0) return -1;
    if (x * 10 + v > n) return -1;
    x = x * 10 + v;
  }
  if (1 <= x && x <= n) return x;
  return -1;
}
queue<int> epos[2], wait[2];
void cope() {
  while ((((int)(wait[0]).size()) && ((int)(epos[0]).size())) ||
         (((int)(wait[1]).size()) && ((int)(epos[1]).size()))) {
    for (int t = (0); t < (2); ++t) {
      if (!wait[t].empty() && !epos[t].empty()) {
        int i = wait[t].front();
        wait[t].pop();
        int p = epos[t].front();
        epos[t].pop();
        if (~val[i]) {
          ans.push_back(make_pair(val[i], p));
          swap(val[i], p);
          empty[val[i]] = false, empty[p] = true;
          epos[p <= e].push(p);
        } else {
          ans.push_back(make_pair(-i, p));
          empty[val[i] = p] = false;
        }
      }
    }
  }
}
void gao() {
  int L[2] = {e + 1, 1};
  int R[2] = {n, e};
  for (int i = (1); i < (n + 1); ++i)
    if (empty[i]) epos[i <= e].push(i);
  for (int i = (0); i < (n); ++i)
    if (~val[i]) {
      if (L[type[i]] <= val[i] && val[i] <= R[type[i]]) continue;
      wait[type[i]].push(i);
    }
  if (!((int)(epos[0]).size()) && !((int)(epos[1]).size()) &&
      (((int)(wait[0]).size()) || ((int)(wait[1]).size()))) {
    int fp;
    if (((int)(wait[0]).size()))
      fp = wait[0].front(), wait[0].pop();
    else
      fp = wait[1].front(), wait[1].pop();
    ans.push_back(make_pair(-fp, -n));
    empty[val[fp]] = true;
    epos[val[fp] <= e].push(val[fp]);
  }
  cope();
  for (int i = (0); i < (n); ++i)
    if (val[i] == -1) wait[type[i]].push(i);
  cope();
  for (int i = (1); i < (n + 1); ++i)
    if (empty[i]) ans.push_back(make_pair(-n, i));
}
inline void out(int x) {
  if (1 <= x && x <= n)
    cout << x;
  else
    cout << name[-x];
}
int main() {
  ios::sync_with_stdio(false);
  cin >> n;
  for (int i = (0); i < (n); ++i) cin >> name[i] >> type[i];
  name[n] = "temp";
  for (int i = (0); i < (n); ++i) e += type[i], val[i] = get(name[i]);
  memset(empty, true, sizeof(empty));
  for (int i = (0); i < (n); ++i)
    if (~val[i]) empty[val[i]] = false;
  gao();
  cout << ((int)(ans).size()) << endl;
  for (int i = (0); i < (((int)(ans).size())); ++i) {
    int x, y;
    tie(x, y) = ans[i];
    cout << "move ";
    out(x);
    cout << " ";
    out(y);
    cout << endl;
  }
  return 0;
}
