#include <bits/stdc++.h>
using namespace std;
const int MAX_N = 100000;
const int L = 6;
typedef char str[L + 2];
struct Fl {
  str s;
  int t, d;
  Fl() {}
  int _atoi(char *cpt) {
    if (*cpt == '0') return -1;
    int r = 0;
    while (*cpt) {
      if (*cpt < '0' || *cpt > '9') return -1;
      r = r * 10 + (*(cpt++) - '0');
    }
    return r;
  }
  void set(str _s, int _d) {
    memcpy(s, _s, sizeof(str));
    d = _d;
  }
  void read() {
    scanf("%s%d", s, &t);
    t ^= 1;
    d = _atoi(s);
  }
  void print() { printf("'%s',%d,%d\n", s, t, d); }
};
Fl fs[MAX_N];
string oss[MAX_N];
bool used[MAX_N + 1];
queue<int> eqs, rqs, oqs, eds, rds;
str sfs[MAX_N + 1], sts[MAX_N + 1];
void tempf(char *t, int on) {
  string w(L, 'a');
  for (;;) {
    int k = lower_bound(oss, oss + on, w) - oss;
    if (k >= on || oss[k] != w) break;
    for (int i = L - 1; i >= 0; i--) {
      if (++w[i] <= 'z') break;
      w[i] = 'a';
    }
  }
  for (int i = 0; i < L; i++) t[i] = w[i];
  t[L] = '\0';
}
inline void setop(int &m, str sf, str st) {
  memcpy(sfs[m], sf, sizeof(str));
  memcpy(sts[m], st, sizeof(str));
  m++;
}
int main() {
  int n;
  scanf("%d", &n);
  int en = 0, on = 0;
  for (int i = 0; i < n; i++) {
    fs[i].read();
    if (fs[i].t == 0) en++;
    if (fs[i].d < 1 || fs[i].d > n) fs[i].d = -1;
    if (fs[i].d < 0) oss[on++] = string(fs[i].s);
  }
  sort(oss, oss + on);
  for (int i = 0; i < n; i++) {
    Fl &fi = fs[i];
    if (fi.d < 0)
      oqs.push(i);
    else {
      used[fi.d] = true;
      if (fi.d <= en && fi.t == 1)
        rqs.push(i);
      else if (fi.d > en && fi.t == 0)
        eqs.push(i);
    }
  }
  for (int i = 1; i <= en; i++)
    if (!used[i]) eds.push(i);
  for (int i = en + 1; i <= n; i++)
    if (!used[i]) rds.push(i);
  int m = 0;
  if (eds.empty() && rds.empty() && (!eqs.empty() || !rqs.empty())) {
    str t;
    tempf(t, on);
    int k;
    if (!eqs.empty()) {
      k = eqs.front();
      eqs.pop();
      rds.push(fs[k].d);
    } else {
      k = rqs.front(), rqs.pop();
      eds.push(fs[k].d);
    }
    setop(m, fs[k].s, t);
    fs[k].set(t, -1);
    oqs.push(k);
  }
  while (!eqs.empty() || !rqs.empty()) {
    if (!eqs.empty() && !eds.empty()) {
      int d = eds.front();
      eds.pop();
      str t;
      sprintf(t, "%d", d);
      int k = eqs.front();
      eqs.pop();
      setop(m, fs[k].s, t);
      rds.push(fs[k].d);
      fs[k].set(t, d);
    }
    if (!rqs.empty() && !rds.empty()) {
      int d = rds.front();
      rds.pop();
      str t;
      sprintf(t, "%d", d);
      int k = rqs.front();
      rqs.pop();
      setop(m, fs[k].s, t);
      eds.push(fs[k].d);
      fs[k].set(t, d);
    }
  }
  while (!oqs.empty()) {
    int k = oqs.front();
    oqs.pop();
    int d;
    if (fs[k].t == 0)
      d = eds.front(), eds.pop();
    else
      d = rds.front(), rds.pop();
    str t;
    sprintf(t, "%d", d);
    setop(m, fs[k].s, t);
  }
  printf("%d\n", m);
  for (int i = 0; i < m; i++) printf("move %s %s\n", sfs[i], sts[i]);
  return 0;
}
