#include <bits/stdc++.h>
using namespace std;
const int inf = 1e9 + 7;
const int maxN = 2e6 + 5;
string s[maxN];
int type[maxN];
int n;
pair<int, int> rang[3];
int sum[maxN];
bool in_range(int x, int type) {
  return x >= rang[type].first && x <= rang[type].second;
}
int conv(string s) {
  if (s[0] == '0') return inf;
  int pow = 1;
  int ans = 0;
  for (int i = ((int)s.size() - 1); i >= (0); --i) {
    if (s[i] < '0' || s[i] > '9') {
      return inf;
    }
    ans += (s[i] - '0') * pow;
    pow *= 10;
  }
  return ans;
}
vector<string> change[3];
vector<string> empty1, empty0, _0to1_;
bool used[maxN];
void print(vector<string> wek) {
  for (auto w : wek) cout << w << " ";
  cout << endl;
}
int main() {
  ios_base::sync_with_stdio(0);
  cin >> n;
  for (int i = (0); i <= ((n)-1); ++i) {
    cin >> s[i] >> type[i];
    sum[type[i]]++;
  }
  rang[1] = pair<int, int>(1, sum[1]);
  rang[0] = pair<int, int>(sum[1] + 1, n);
  for (int i = (0); i <= ((n)-1); ++i) {
    int x = conv(s[i]);
    bool b = (s[i][0] == '0');
    if (x <= n && !b) {
      if (!in_range(x, type[i])) {
        if (type[i] == 0)
          _0to1_.push_back(s[i]);
        else
          change[type[i]].push_back(s[i]);
      }
      used[x] = true;
    } else {
      change[type[i]].push_back(s[i]);
    }
  }
  for (int i = (1); i <= (sum[1]); ++i) {
    if (!used[i]) {
      empty1.push_back(to_string(i));
    }
  }
  for (int i = (sum[1] + 1); i <= (n); ++i) {
    if (!used[i]) empty0.push_back(to_string(i));
  }
  for (int i = (0); i <= (1); ++i) {
    vector<string> wek;
    for (auto v : change[i])
      if (conv(v) <= n) wek.push_back(v);
    for (auto v : change[i])
      if (conv(v) > n) wek.push_back(v);
    change[i] = wek;
  }
  vector<string> result;
  string tmp = to_string(n + 1);
  string prev = tmp;
  bool pom = false;
  for (auto v : change[1]) {
    if ((int)empty1.size() != 0) {
      result.push_back("move " + v + " " + empty1.back());
      empty1.pop_back();
      int x = conv(v);
      if (x <= n && in_range(x, 0)) {
        empty0.push_back(v);
      }
    } else {
      if ((int)empty0.size() != 0) {
        result.push_back("move " + _0to1_.back() + " " + empty0.back());
        empty0.pop_back();
        result.push_back("move " + v + " " + _0to1_.back());
        _0to1_.pop_back();
        int x = conv(v);
        if (x <= n && in_range(x, 0)) {
          empty0.push_back(v);
        }
      } else {
        result.push_back("move " + v + " " + prev);
        result.push_back("move " + _0to1_.back() + " " + v);
        prev = _0to1_.back();
        _0to1_.pop_back();
        pom = true;
      }
    }
  }
  if (pom) {
    result.push_back("move " + tmp + " " + prev);
  }
  for (auto v : change[0]) {
    result.push_back("move " + v + " " + empty0.back());
    empty0.pop_back();
  }
  cout << (int)result.size() << endl;
  for (auto v : result) cout << v << endl;
  return 0;
}
