#include <bits/stdc++.h>
using namespace std;
const int MAXN = 100100;
int n, e;
vector<pair<string, string> > sol;
vector<string> ost0, ost1;
vector<int> v0, v1;
int strtoi(string s) {
  for (int j = 0; j < (int)s.size(); j++)
    if (s[j] >= 'a' && s[j] <= 'z') return -1;
  if (s[0] == '0') return -1;
  int ret = 0;
  for (int j = 0; j < (int)s.size(); j++) {
    ret = ret * 10 + (s[j] - '0');
  }
  return ret;
}
vector<int> vi0, vi1;
bool bio[MAXN];
void load() {
  scanf("%d", &n);
  for (int i = 0; i < n; i++) {
    int b;
    string s;
    cin >> s >> b;
    if (b) {
      e++;
      int br = strtoi(s);
      if (br == -1)
        ost0.push_back(s);
      else
        v0.push_back(br);
    } else {
      int br = strtoi(s);
      if (br == -1)
        ost1.push_back(s);
      else
        v1.push_back(br);
    }
  }
  for (int i : v0) {
    if (i <= e)
      bio[i] = true;
    else
      vi0.push_back(i);
  }
  for (int i : v1) {
    if (i > e && i <= n)
      bio[i] = true;
    else
      vi1.push_back(i);
  }
  sort(vi0.begin(), vi0.end());
  sort(vi1.begin(), vi1.end());
  for (int i : vi0)
    if (i <= n) bio[i] = true;
  for (int i : vi1)
    if (i <= n) bio[i] = true;
}
void solve() {
  if (vi0.size() + vi1.size() + ost0.size() + ost1.size() == 0) return;
  vector<int> fre0, fre1;
  for (int i = 1; i <= n; i++) {
    if (!bio[i]) {
      if (i <= e)
        fre0.push_back(i);
      else
        fre1.push_back(i);
    }
  }
  int id0 = 0, id1 = 0;
  int s0 = vi0.size(), s1 = vi1.size();
  if (fre0.size() + fre1.size() == 0) {
    if (id0 < s0 && vi0[id0] <= n) {
      sol.push_back(make_pair(to_string(vi0[id0]), "kurac"));
      ost0.push_back("kurac");
      fre1.push_back(vi0[id0]);
      id0++;
    } else {
      sol.push_back(make_pair(to_string(vi1[id1]), "kurac"));
      ost1.push_back("kurac");
      fre0.push_back(vi1[id1]);
      id1++;
    }
  }
  while (id0 < s0 || id1 < s1) {
    if (id0 < s0 && !fre0.empty() && vi0[id0] <= n) {
      fre1.push_back(vi0[id0]);
      sol.push_back(make_pair(to_string(vi0[id0]), to_string(fre0.back())));
      fre0.pop_back();
      id0++;
    } else if (id1 < s1 && !fre1.empty() && vi1[id1] <= n) {
      fre0.push_back(vi1[id1]);
      sol.push_back(make_pair(to_string(vi1[id1]), to_string(fre1.back())));
      fre1.pop_back();
      id1++;
    } else {
      if (id1 < s1 && !fre1.empty()) {
        sol.push_back(make_pair(to_string(vi1[id1]), to_string(fre1.back())));
        fre1.pop_back();
        id1++;
      } else {
        sol.push_back(make_pair(to_string(vi0[id0]), to_string(fre0.back())));
        fre0.pop_back();
        id0++;
      }
    }
  }
  for (string s : ost0) {
    sol.push_back(make_pair(s, to_string(fre0.back())));
    fre0.pop_back();
  }
  for (string s : ost1) {
    sol.push_back(make_pair(s, to_string(fre1.back())));
    fre1.pop_back();
  }
}
int main() {
  load();
  solve();
  printf("%d\n", (int)sol.size());
  for (pair<string, string> p : sol) {
    cout << "move " << p.first << " " << p.second << endl;
  }
  return 0;
}
