#include <bits/stdc++.h>
using namespace std;
const int INF = 1 << 30;
const long long int MAX = 1e9 + 7;
void array_show(int *array, int array_n, char middle = ' ') {
  for (int i = 0; i < array_n; i++)
    printf("%d%c", array[i], (i != array_n - 1 ? middle : '\n'));
}
void array_show(long long int *array, int array_n, char middle = ' ') {
  for (int i = 0; i < array_n; i++)
    printf("%lld%c", array[i], (i != array_n - 1 ? middle : '\n'));
}
void array_show(vector<int> &vec_s, int vec_n = -1, char middle = ' ') {
  if (vec_n == -1) vec_n = vec_s.size();
  for (int i = 0; i < vec_n; i++)
    printf("%d%c", vec_s[i], (i != vec_n - 1 ? middle : '\n'));
}
void array_show(vector<long long int> &vec_s, int vec_n = -1,
                char middle = ' ') {
  if (vec_n == -1) vec_n = vec_s.size();
  for (int i = 0; i < vec_n; i++)
    printf("%lld%c", vec_s[i], (i != vec_n - 1 ? middle : '\n'));
}
string st[110000];
int t[110000];
int string_to_int(string sa) {
  int s = 0;
  int a;
  for (auto ca : sa) {
    s *= 10;
    a = (int)ca - (int)'0';
    if (a < 0 || a >= 10) return -1;
    if (s == 0 && a == 0) return -1;
    s += a;
  }
  return s;
}
bool used[110000];
vector<string> va[2], vb[2];
vector<pair<string, string>> vs;
int main() {
  int n, m;
  int i, j, k;
  int a, b, c;
  string sa;
  cin >> n;
  m = 0;
  for (i = 0; i < n; i++) {
    cin >> st[i] >> t[i];
    if (t[i] == 1) m++;
  }
  b = -1;
  for (i = 0; i < n; i++) {
    a = string_to_int(st[i]);
    if (a <= 0 || a > n)
      vb[t[i]].push_back(st[i]);
    else {
      used[a] = true;
      if (t[i] == 0 && a <= m) va[0].push_back(st[i]);
      if (t[i] == 1 && a > m) va[1].push_back(st[i]);
    }
  }
  for (i = 1; i <= n; i++) {
    if (!used[i]) {
      b = i;
      break;
    }
  }
  if (b == -1) {
    if (va[0].empty()) {
      cout << 0 << endl;
      return 0;
    }
    vs.push_back(make_pair(va[0].back(), to_string(n + 1)));
    a = string_to_int(va[0].back());
    used[a] = false, b = a;
    va[0].pop_back();
    vb[0].push_back(to_string(n + 1));
  }
  while (1) {
    if (b <= m)
      a = 1;
    else
      a = 0;
    if (va[a].empty()) break;
    vs.push_back(make_pair(va[a].back(), to_string(b)));
    c = string_to_int(va[a].back());
    used[c] = false, used[b] = true;
    va[a].pop_back(), b = c;
  }
  for (i = 1; i <= n; i++) {
    if (used[i]) continue;
    if (i <= m)
      a = 1;
    else
      a = 0;
    if (va[a].empty()) continue;
    vs.push_back(make_pair(va[a].back(), to_string(i)));
    c = string_to_int(va[a].back());
    used[c] = false, used[i] = true;
    va[a].pop_back();
  }
  for (i = 1; i <= n; i++) {
    if (used[i]) continue;
    if (i <= m)
      a = 1;
    else
      a = 0;
    if (vb[a].empty()) continue;
    vs.push_back(make_pair(vb[a].back(), to_string(i)));
    vb[a].pop_back();
  }
  cout << vs.size() << endl;
  for (auto node : vs) {
    cout << "move " << node.first << " " << node.second << endl;
  }
}
