#include <bits/stdc++.h>
using namespace std;
const long long inf = 1e18;
const long long eps = 1e-8;
int house[110000];
int tp[110000];
string name[110000];
map<string, int> frd;
int main() {
  priority_queue<string> freesamp, ocupsamp, freereg, ocupreg;
  priority_queue<string> movesamp, movereg;
  int n;
  int samp = 0, norm = 0;
  cin >> n;
  for (int i = 0, __ = n; i < __; i++) {
    cin >> name[i] >> tp[i];
    if (tp[i])
      samp++;
    else
      norm++;
    frd[name[i]] = tp[i] + 1;
  }
  for (int i = 1, __ = samp + 1; i < __; i++) {
    string s = to_string(i);
    if (frd[s] == 1) {
      ocupsamp.push(s);
      frd[s] += 4;
    }
    if (frd[s] == 0) freesamp.push(s);
    if (frd[s] == 2) frd[s] = 4;
  }
  for (int i = samp + 1, __ = n + 1; i < __; i++) {
    string s = to_string(i);
    if (frd[s] == 2) {
      ocupreg.push(s);
      frd[s] += 4;
    }
    if (frd[s] == 0) {
      freereg.push(s);
    }
    if (frd[s] == 1) frd[s] = 3;
  }
  for (auto s : frd) {
    if (s.second == 2) movesamp.push(s.first);
    if (s.second == 1) movereg.push(s.first);
  }
  vector<string> vs;
  std::srand(unsigned(std::time(0)));
  string spot = "abcdefghijklmnopqrstuvwxyz";
  random_shuffle(spot.begin(), spot.end());
  spot = spot.substr(0, 6);
  int onspot = 0;
  while (true) {
    if (!freesamp.empty() && !ocupreg.empty()) {
      vs.push_back("move " + ocupreg.top() + " " + freesamp.top());
      freesamp.pop();
      freereg.push(ocupreg.top());
      ocupreg.pop();
    } else if (!freereg.empty() && !ocupsamp.empty()) {
      vs.push_back("move " + ocupsamp.top() + " " + freereg.top());
      freereg.pop();
      freesamp.push(ocupsamp.top());
      ocupsamp.pop();
    } else if (!movereg.empty() && !freereg.empty()) {
      vs.push_back("move " + movereg.top() + " " + freereg.top());
      freereg.pop();
      movereg.pop();
    } else if (!movesamp.empty() && !freesamp.empty()) {
      vs.push_back("move " + movesamp.top() + " " + freesamp.top());
      freesamp.pop();
      movesamp.pop();
    } else if (!ocupreg.empty() && !ocupsamp.empty()) {
      vs.push_back("move " + ocupreg.top() + " " + spot);
      freereg.push(ocupreg.top());
      ocupreg.pop();
      onspot = 1;
    } else if (onspot) {
      onspot = 0;
      vs.push_back("move " + spot + " " + freesamp.top());
      freesamp.pop();
    } else
      break;
  }
  cout << vs.size() << endl;
  for (auto s : vs) {
    cout << s << endl;
  }
}
