#include <bits/stdc++.h>
using namespace std;
long long int n;
string to_string(int x) {
  if (x == 0) return "0";
  vector<char> ch;
  while (x) {
    ch.push_back('0' + x % 10);
    x /= 10;
  }
  reverse(ch.begin(), ch.end());
  string ret;
  for (char c : ch) ret += c;
  return ret;
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  cin >> n;
  long long int exc = 0;
  vector<string> ex, tes;
  for (long long int i = 1; i <= n; ++i) {
    string s;
    long long int ty;
    cin >> s >> ty;
    if (ty == 1) {
      exc++;
      ex.push_back(s);
    } else
      tes.push_back(s);
  }
  set<string> cex, ctes;
  for (long long int i = 1; i <= exc; ++i) cex.insert(to_string(i));
  for (long long int i = exc + 1; i <= n; ++i) ctes.insert(to_string(i));
  set<string> exdone, exfree, exswap, exext;
  set<string> tesdone, tesfree, tesswap, tesext;
  for (string s : ex) {
    if (cex.find(s) != cex.end())
      exdone.insert(s);
    else if (ctes.find(s) != ctes.end())
      tesswap.insert(s);
    else
      exext.insert(s);
  }
  for (string s : tes) {
    if (ctes.find(s) != ctes.end())
      tesdone.insert(s);
    else if (cex.find(s) != cex.end())
      exswap.insert(s);
    else
      tesext.insert(s);
  }
  for (long long int i = 1; i <= exc; ++i) {
    if (exdone.find(to_string(i)) == exdone.end() &&
        exswap.find(to_string(i)) == exswap.end())
      exfree.insert(to_string(i));
  }
  for (long long int i = exc + 1; i <= n; ++i) {
    if (tesdone.find(to_string(i)) == tesdone.end() &&
        tesswap.find(to_string(i)) == tesswap.end())
      tesfree.insert(to_string(i));
  }
  vector<string> ans;
  while (1) {
    if (exdone.size() == exc && tesdone.size() == n - exc) break;
    if (exfree.size()) {
      if (tesswap.size()) {
        auto it = tesswap.begin();
        string cur = *it;
        tesswap.erase(it);
        tesfree.insert(cur);
        ans.push_back("move " + cur + " " + (*(exfree.begin())));
        exdone.insert(*(exfree.begin()));
        exfree.erase(exfree.begin());
      } else if (exext.size()) {
        auto it = exext.begin();
        string cur = *it;
        exext.erase(it);
        ans.push_back("move " + cur + " " + (*(exfree.begin())));
        exdone.insert(*(exfree.begin()));
        exfree.erase(exfree.begin());
      }
    } else if (tesfree.size()) {
      if (exswap.size()) {
        auto it = exswap.begin();
        string cur = *it;
        exswap.erase(it);
        exfree.insert(cur);
        ans.push_back("move " + cur + " " + (*(tesfree.begin())));
        tesdone.insert(*(tesfree.begin()));
        tesfree.erase(tesfree.begin());
      } else if (tesext.size()) {
        auto it = tesext.begin();
        string cur = *it;
        tesext.erase(it);
        ans.push_back("move " + cur + " " + (*(tesfree.begin())));
        tesdone.insert(*(tesfree.begin()));
        tesfree.erase(tesfree.begin());
      }
    } else {
      auto it = exswap.begin();
      string cur = *it;
      ans.push_back("move " + cur + " shiv");
      exswap.erase(it);
      exfree.insert(cur);
      tesext.insert("shiv");
    }
  }
  cout << ans.size() << '\n';
  for (auto x : ans) cout << x << '\n';
}
