#include <bits/stdc++.h>
using namespace std;
struct File {
  int n;
  char nm[8];
  void verify(int N) {
    n = (-1);
    for (char *p = nm; *p; p++) {
      if (!('0' <= *p && *p <= '9')) return;
      if (p == nm && *p == '0') return;
    }
    n = atoi(nm);
    if (!(1 <= n && n <= N)) n = (-1);
  }
  bool operator<(const File &fl) const {
    if (n != fl.n) return n > fl.n;
    return strcmp(nm, fl.nm) < 0;
  }
};
string makeCommand(const char *nm, int n) {
  char bf[32];
  sprintf(bf, "move %s %d", nm, n);
  return bf;
}
string makeCommand(const char *n1, const char *n2) {
  char bf[32];
  sprintf(bf, "move %s %s", n1, n2);
  return bf;
}
void preprocess(set<File> &s1, set<int> &f1, set<int> &f2) {
  for (set<File>::iterator it = s1.begin(); it != s1.end();)
    if (f1.count(it->n)) {
      f1.erase(f1.find(it->n));
      s1.erase(it++);
    } else if (f2.count(it->n)) {
      f2.erase(f2.find(it->n));
      ++it;
    } else
      ++it;
}
void preprocess(set<File> &s1, set<int> &f1, set<File> &s2, set<int> &f2) {
  preprocess(s1, f1, f2);
  preprocess(s2, f2, f1);
}
bool renameNumbers(set<File> &s1, set<int> &f1, set<int> &f2,
                   vector<string> &cm) {
  bool A = 0;
  for (set<File>::iterator it = s1.begin(); it != s1.end();) {
    if (it->n == (-1)) break;
    if (f1.empty()) break;
    A = 1;
    cm.push_back(makeCommand(it->nm, *f1.begin()));
    f2.insert(it->n);
    f1.erase(f1.begin());
    s1.erase(it++);
  }
  return A;
}
void renameNumbers(set<File> &s1, set<int> &f1, set<File> &s2, set<int> &f2,
                   vector<string> &cm) {
  while (renameNumbers(s1, f1, f2, cm) | renameNumbers(s2, f2, f1, cm))
    ;
}
void resolveConflict(set<File> &s1, set<int> &f1, set<File> &s2, set<int> &f2,
                     vector<string> &cm) {
  if (!s1.empty() && !s2.empty() && s1.begin()->n != (-1) &&
      s2.begin()->n != (-1)) {
    char random[8] = {};
    srand(time(NULL));
    while (true) {
      for (int i = 0; i < 6; i++) random[i] = 'a' + rand() % 26;
      bool f = 0;
      for (typeof(s1.begin()) it = s1.begin(); it != s1.end(); ++it)
        if (strcmp(it->nm, random) == 0) f = 1;
      for (typeof(s2.begin()) it = s2.begin(); it != s2.end(); ++it)
        if (strcmp(it->nm, random) == 0) f = 1;
      if (!f) break;
    }
    File fl = *s1.begin();
    s1.erase(s1.begin());
    cm.push_back(makeCommand(fl.nm, random));
    f2.insert(fl.n);
    fl.n = (-1);
    strcpy(fl.nm, random);
    s1.insert(fl);
    renameNumbers(s1, f1, s2, f2, cm);
  }
}
void renameLetters(set<File> &s1, set<int> &f1, vector<string> &cm) {
  assert((int)(s1).size() == (int)(f1).size());
  for (set<File>::iterator it = s1.begin(); it != s1.end();) {
    cm.push_back(makeCommand(it->nm, *f1.begin()));
    f1.erase(f1.begin());
    ++it;
  }
}
void renameLetters(set<File> &s1, set<int> &f1, set<File> &s2, set<int> &f2,
                   vector<string> &cm) {
  renameLetters(s1, f1, cm);
  renameLetters(s2, f2, cm);
}
int main() {
  int i, t, N;
  scanf("%d", &N);
  set<File> s1, s2;
  for (i = 0; i < N; i++) {
    File fl;
    scanf("%s %d", fl.nm, &t);
    fl.verify(N);
    if (t == 1)
      s1.insert(fl);
    else
      s2.insert(fl);
  }
  int C1 = (int)(s1).size();
  int C2 = (int)(s2).size();
  set<int> f1, f2;
  for (i = 1; i <= C1; i++) f1.insert(i);
  for (i = 1; i <= C2; i++) f2.insert(C1 + i);
  vector<string> cm;
  preprocess(s1, f1, s2, f2);
  renameNumbers(s1, f1, s2, f2, cm);
  resolveConflict(s1, f1, s2, f2, cm);
  renameLetters(s1, f1, s2, f2, cm);
  printf("%d\n", (int)(cm).size());
  for (i = 0; i < (int)(cm).size(); i++) printf("%s\n", cm[i].c_str());
  return 0;
}
