#include <bits/stdc++.h>
#pragma GCC optimize("Ofast")
#pragma GCC target("sse,sse2,sse3,sse3,sse4,popcnt,abm,mmx")
using namespace std;
map<string, int> m;
bool u[100500];
string tos(int i) {
  string second;
  while (i) {
    second.push_back(i % 10 + '0');
    i /= 10;
  }
  reverse(second.begin(), second.end());
  return second;
}
bool is(string second) {
  int n = second.size();
  if (second[0] == '0') return false;
  for (int i = 0; i < n; ++i) {
    if (second[i] > '9' || second[i] < '0') return false;
  }
  if (n > 6) return false;
  return true;
}
int toi(string second) {
  int x = 0;
  int n = second.size();
  for (int i = n - 1, k = 1; i >= 0; --i) {
    x += (second[i] - '0') * k;
    k *= 10;
  }
  return x;
}
vector<string> v;
vector<string> w;
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  int n;
  cin >> n;
  int e = 0;
  for (int i = 0; i < n; ++i) {
    string second;
    int t;
    cin >> second >> t;
    if (t == 0) {
      m[second] = -1;
      w.push_back(second);
    } else {
      m[second] = 1, e++;
      v.push_back(second);
    }
  }
  vector<string> ans;
  set<int> first;
  set<int> second;
  for (int i = 1; i <= e; ++i)
    if (m.count(tos(i)) == 0) first.insert(i);
  for (int i = e + 1; i <= n; ++i)
    if (m.count(tos(i)) == 0) second.insert(i);
  int l = 1;
  int r = e + 1;
  while (((!first.empty() && r <= n) || (!second.empty() && l <= e))) {
    while (!second.empty() && l <= e) {
      int i = l;
      if (m.count(tos(i))) {
        if (m[tos(i)] == -1) {
          first.insert(i);
          m[tos(i)] = 0;
          ans.push_back("move " + tos(i) + " " + tos(*second.begin()));
          m[tos(*second.begin())] = -1;
          second.erase(second.begin());
        }
      }
      l++;
    }
    while (!first.empty() && r <= n) {
      int i = r;
      if (m.count(tos(i))) {
        if (m[tos(i)] == 1) {
          second.insert(i);
          m[tos(i)] = 0;
          ans.push_back("move " + tos(i) + " " + tos(*first.begin()));
          m[tos(*first.begin())] = 1;
          first.erase(first.begin());
        }
      }
      r++;
    }
  }
  l = 1, r = e + 1;
  for (int i = 1; i <= e; ++i) {
    if (m[tos(i)] == -1) {
      m[tos(i)] = 0;
      ans.push_back("move " + tos(i) + " ruslan");
      first.insert(i);
      m["ruslan"] = -1;
      break;
    }
  }
  while (((!first.empty() && r <= n) || (!second.empty() && l <= e))) {
    while (!second.empty() && l <= e) {
      int i = l;
      if (m.count(tos(i))) {
        if (m[tos(i)] == -1) {
          first.insert(i);
          m[tos(i)] = 0;
          ans.push_back("move " + tos(i) + " " + tos(*second.begin()));
          m[tos(*second.begin())] = -1;
          second.erase(second.begin());
        }
      }
      l++;
    }
    while (!first.empty() && r <= n) {
      int i = r;
      if (m.count(tos(i))) {
        if (m[tos(i)] == 1) {
          second.insert(i);
          m[tos(i)] = 0;
          ans.push_back("move " + tos(i) + " " + tos(*first.begin()));
          m[tos(*first.begin())] = 1;
          first.erase(first.begin());
        }
      }
      r++;
    }
  }
  for (auto i : m) {
    if (i.second == 0) {
      continue;
    }
    if (i.second == 1) {
      if (!is(i.first) || !(toi(i.first) >= 1 && toi(i.first) <= e)) {
        ans.push_back("move " + i.first + " " + tos(*first.begin()));
        first.erase(first.begin());
      }
    } else {
      if (!is(i.first) || !(toi(i.first) > e && toi(i.first) <= n)) {
        ans.push_back("move " + i.first + " " + tos(*second.begin()));
        second.erase(second.begin());
      }
    }
  }
  cout << ans.size() << '\n';
  for (auto i : ans) {
    cout << i << '\n';
  }
  return 0;
}
