#include <bits/stdc++.h>
using namespace std;
set<int> EA;
set<int> RA;
set<string> E, EE;
set<string> R, RR;
int e;
int n;
vector<pair<string, int> > inp;
string tos(int t) {
  stringstream ss;
  ss << t;
  return ss.str();
}
int toi(string s) {
  int t;
  istringstream iss(s);
  iss >> t;
  return t;
}
int chk(string s) {
  int t = toi(s);
  if (tos(t) == s)
    return t;
  else
    return -1;
}
vector<pair<string, string> > S;
int main() {
  cin >> n;
  for (int i = 0; i < n; i++) {
    string s;
    int t;
    cin >> s >> t;
    e += t;
    inp.push_back(make_pair(s, t));
  }
  for (int i = 1; i <= e; i++) EA.insert(i);
  for (int i = e + 1; i <= n; i++) RA.insert(i);
  for (int i = 0; i < n; i++) {
    int c = chk(inp[i].first);
    if (c >= 1 && c <= n) {
      if (c <= e)
        EA.erase(c);
      else
        RA.erase(c);
      if ((c <= e) == inp[i].second) continue;
      if (inp[i].second)
        EE.insert(inp[i].first);
      else
        RR.insert(inp[i].first);
      continue;
    }
    if (inp[i].second)
      E.insert(inp[i].first);
    else
      R.insert(inp[i].first);
  }
  if (E.empty() && R.empty() && EE.empty() && RR.empty()) {
    puts("0");
    return 0;
  }
  if (EA.empty() && RA.empty()) {
    string u;
    while (true) {
      u = "";
      for (int i = 0; i < 6; i++) u += (char)('a' + (rand() % 26));
      if (E.find(u) == E.end() && R.find(u) == R.end()) break;
    }
    if (!EE.empty()) {
      string c = *EE.begin();
      EE.erase(c);
      E.insert(u);
      RA.insert(toi(c));
      S.push_back(make_pair(c, u));
    } else {
      assert(!RR.empty());
      string c = *RR.begin();
      RR.erase(c);
      R.insert(u);
      EA.insert(toi(c));
      S.push_back(make_pair(c, u));
    }
  }
  while (!EA.empty() || !RA.empty()) {
    if (!EE.empty() && !EA.empty()) {
      int y = *EA.begin();
      EA.erase(y);
      string x = *EE.begin();
      EE.erase(x);
      RA.insert(toi(x));
      S.push_back(make_pair(x, tos(y)));
    } else if (!RR.empty() && !RA.empty()) {
      int y = *RA.begin();
      RA.erase(y);
      string x = *RR.begin();
      RR.erase(x);
      EA.insert(toi(x));
      S.push_back(make_pair(x, tos(y)));
    } else if (!E.empty() && !EA.empty()) {
      int y = *EA.begin();
      EA.erase(y);
      string x = *E.begin();
      E.erase(x);
      S.push_back(make_pair(x, tos(y)));
    } else if (!R.empty() && !RA.empty()) {
      int y = *RA.begin();
      RA.erase(y);
      string x = *R.begin();
      R.erase(x);
      S.push_back(make_pair(x, tos(y)));
    } else
      assert(false);
  }
  cout << S.size() << endl;
  for (int i = 0; i < (int)S.size(); i++)
    cout << "move " << S[i].first << " " << S[i].second << endl;
  return 0;
}
