#include <bits/stdc++.h>
using namespace std;
int n, e;
string s;
int t;
unordered_set<int> es;
unordered_set<int> rs;
unordered_set<int> e_f;
unordered_set<int> r_f;
string gs(int t) {
  string s = "";
  while (t) {
    s = (char)('0' + (t % 10)) + s;
    t /= 10;
  }
  return s;
}
int tmp;
string tmpname = "";
int nmsa = 0;
unordered_map<string, int> nms;
string nmsb[505050];
unordered_set<int> fre;
unordered_set<int> frr;
vector<pair<int, int> > ans;
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cin >> n;
  for (int i = 1; i <= n; ++i) {
    nms[gs(i)] = i;
    nmsb[i] = gs(i);
  }
  nmsa = n + 1;
  for (int i = 0; i < n; ++i) {
    cin >> s >> t;
    if (nms.count(s)) {
      if (t == 0)
        rs.insert(nms[s]);
      else
        es.insert(nms[s]);
    } else {
      nms[s] = nmsa;
      if (t == 0)
        rs.insert(nmsa);
      else
        es.insert(nmsa);
      nmsb[nmsa] = s;
      ++nmsa;
    }
  }
  e = es.size();
  int i = n + 1;
  while (nms.count(gs(i))) ++i;
  tmpname = gs(i);
  nms[tmpname] = nmsa;
  nmsb[nmsa] = tmpname;
  tmp = nmsa;
  ++nmsa;
  for (int i = 1; i <= e; ++i) {
    if (!es.count(i) && !rs.count(i)) fre.insert(i);
  }
  for (int i = e + 1; i <= n; ++i) {
    if (!es.count(i) && !rs.count(i)) frr.insert(i);
  }
  vector<int> ers;
  for (auto i : es) {
    if (1 <= i && i <= e) ers.push_back(i);
    if (e + 1 <= i && i <= n) e_f.insert(i);
  }
  for (auto i : ers) es.erase(i);
  ers.clear();
  for (auto i : rs) {
    if (e + 1 <= i && i <= n) ers.push_back(i);
    if (1 <= i && i <= e) r_f.insert(i);
  }
  for (auto i : ers) rs.erase(i);
  while (es.size() || rs.size()) {
    if (e_f.size() && fre.size()) {
      int a = *e_f.begin();
      int b = *fre.begin();
      e_f.erase(a);
      es.erase(a);
      frr.insert(a);
      fre.erase(b);
      ans.push_back(make_pair(a, b));
      continue;
    }
    if (r_f.size() && frr.size()) {
      int a = *r_f.begin();
      int b = *frr.begin();
      r_f.erase(a);
      rs.erase(a);
      fre.insert(a);
      frr.erase(b);
      ans.push_back(make_pair(a, b));
      continue;
    }
    if (es.size() && fre.size()) {
      int a = *es.begin();
      int b = *fre.begin();
      es.erase(a);
      fre.erase(b);
      ans.push_back(make_pair(a, b));
      continue;
    }
    if (rs.size() && frr.size()) {
      int a = *rs.begin();
      int b = *frr.begin();
      rs.erase(a);
      frr.erase(b);
      ans.push_back(make_pair(a, b));
      continue;
    }
    if (e_f.size() && r_f.size()) {
      int a = *e_f.begin();
      int b = tmp;
      e_f.erase(a);
      es.erase(a);
      es.insert(b);
      frr.insert(a);
      ans.push_back(make_pair(a, b));
      continue;
    }
    cout << "NO HUH HUH, NYT BUGAA...   QAQ" << endl;
    return 1222333444;
  }
  cout << ans.size() << "\n";
  for (int i = 0; i < ans.size(); ++i) {
    cout << "move " << nmsb[ans[i].first] << " " << nmsb[ans[i].second] << "\n";
  }
}
