#include <bits/stdc++.h>
using namespace std;
int toint(string& s) {
  if ((int)s.size() > 6) return -1;
  int ans = 0;
  for (auto i : s) {
    ans *= 10;
    ans += i - '0';
  }
  if (to_string(ans) == s)
    return ans;
  else
    return -1;
}
void solve() {
  int n;
  cin >> n;
  vector<pair<string, pair<int, int>>> v(n);
  int examples = 0;
  for (int i = 0; i < n; i++)
    cin >> v[i].first >> v[i].second.first, examples += v[i].second.first,
        v[i].second.second = toint(v[i].first);
  int ans = 0;
  int ex_to_fi = 0;
  int fi_to_ex = 0;
  vector<int> rem_idx;
  vector<int> ex_s;
  vector<int> fi_s;
  set<int> s;
  for (int i = 1; i < n + 1; i++) s.insert(i);
  set<int> super_magic;
  for (int i = 0; i < n; i++) {
    if (v[i].second.second > n or v[i].second.second < 1)
      v[i].second.second = -1;
    if (v[i].second.second == -1)
      rem_idx.push_back(i), ans++;
    else if (v[i].second.first == 1 and v[i].second.second >= 1 and
             v[i].second.second <= examples) {
      s.erase(v[i].second.second);
      continue;
    } else if (v[i].second.first == 0 and v[i].second.second <= n and
               v[i].second.second > examples) {
      s.erase(v[i].second.second);
      continue;
    } else if (v[i].second.first == 1)
      fi_to_ex++, ex_s.push_back(i);
    else
      ex_to_fi++, fi_s.push_back(i);
    super_magic.insert(v[i].second.second);
  }
  if (ex_to_fi == 0 or fi_to_ex == 0) {
    cout << ans + ex_to_fi + fi_to_ex << '\n';
    for (auto i : ex_s) {
      cout << "move " << v[i].first << " " << *s.begin() << '\n';
      s.erase(s.begin());
    }
    for (auto i : fi_s) {
      cout << "move " << v[i].first << " " << *s.rbegin() << '\n';
      s.erase(*s.rbegin());
    }
    for (auto i : rem_idx) {
      if (v[i].second.first) {
        cout << "move " << v[i].first << " " << *s.begin() << '\n';
        s.erase(s.begin());
      } else {
        cout << "move " << v[i].first << " " << *s.rbegin() << '\n';
        s.erase(*s.rbegin());
      }
    }
    return;
  } else {
    bool temp = 0;
    string garbage;
    set<int> magic = s;
    for (auto i : ex_s) magic.erase(v[i].second.second);
    for (auto i : fi_s) magic.erase(v[i].second.second);
    if (magic.empty()) {
      temp = 1;
      for (int beta = n + 1;; beta++) {
        if (super_magic.count(beta) == 0) {
          garbage = to_string(beta);
          break;
        }
      }
      cout << ex_to_fi + fi_to_ex + 1 + (int)rem_idx.size() << '\n';
      cout << "move"
           << " " << v[ex_s.back()].first << " " << garbage << '\n';
      magic.insert(v[ex_s.back()].second.second);
      ex_s.pop_back();
      ex_to_fi--;
    } else
      cout << ex_to_fi + fi_to_ex + (int)rem_idx.size() << '\n';
    while (!(ex_s.empty() and fi_s.empty())) {
      if (!ex_s.empty() and *magic.begin() <= examples) {
        cout << "move " << v[ex_s.back()].second.second << " " << *magic.begin()
             << '\n';
        s.erase(*magic.begin());
        magic.erase(magic.begin());
        s.insert(v[ex_s.back()].second.second);
        magic.insert(v[ex_s.back()].second.second);
        ex_s.pop_back();
      } else {
        cout << "move " << v[fi_s.back()].second.second << " "
             << *magic.rbegin() << '\n';
        s.erase(*magic.rbegin());
        magic.erase(*magic.rbegin());
        s.insert(v[fi_s.back()].second.second);
        magic.insert(v[fi_s.back()].second.second);
        fi_s.pop_back();
      }
    }
    for (auto i : rem_idx) {
      if (v[i].second.first) {
        cout << "move " << v[i].first << " " << *s.begin() << '\n';
        s.erase(s.begin());
      } else {
        cout << "move " << v[i].first << " " << *s.rbegin() << '\n';
        s.erase(*s.rbegin());
      }
    }
    if (temp) {
      cout << "move"
           << " " << garbage << " " << *s.begin() << '\n';
    }
  }
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  int t = 1;
  while (t--) {
    solve();
  }
  return 0;
}
