#include <bits/stdc++.h>
using namespace std;
#pragma comment(linker, "/STACK:64000000")
const int infi = 1e9 + 7;
const long long infl = 2e18 + 7;
static const int buf_size = 4096;
inline int getChar() {
  static char buf[buf_size];
  static int len = 0, pos = 0;
  if (pos == len) pos = 0, len = fread(buf, 1, buf_size, stdin);
  if (pos == len) return -1;
  return buf[pos++];
}
inline int readChar() {
  int c = getChar();
  while (c <= 32) c = getChar();
  return c;
}
inline int readInt() {
  int s = 1, c = readChar();
  int x = 0;
  if (c == '-') s = -1, c = getChar();
  while ('0' <= c && c <= '9') x = x * 10 + c - '0', c = getChar();
  return s == 1 ? x : -x;
}
vector<pair<string, int> > tmp;
vector<int> ar1, ar2;
int used[100500];
int check(string &s) {
  for (int i = 0; i < ((int)s.size()); ++i)
    if (s[i] < '0' || s[i] > '9') return 0;
  if (!s.size()) return 0;
  if (s[0] == '0') return 0;
  return 1;
}
int get1(string &s) {
  int ans = 0;
  for (int i = 0; i < ((int)s.size()); ++i) {
    ans *= 10;
    ans += s[i] - '0';
  }
  return ans;
}
vector<pair<int, int> > qwe;
vector<string> ans;
string get1(int a) {
  string ans;
  while (a) {
    ans += a % 10 + '0';
    a /= 10;
  }
  reverse(ans.begin(), ans.end());
  return ans;
}
void add_ans(string a, string b) {
  ans.push_back("move " + a + ' ' + b);
  return;
}
int used1[1000000];
int main() {
  srand(time(NULL));
  cin.sync_with_stdio(false);
  cin.tie(0);
  int n;
  cin >> n;
  int sum = 0;
  for (int i = 0; i < (n); ++i) {
    string s;
    int a;
    cin >> s >> a;
    sum += a;
    if (check(s)) {
      int b = get1(s);
      used1[b] = 1;
      if (b < 1 || b > n) {
        tmp.push_back(make_pair(s, a));
        continue;
      }
      qwe.push_back(make_pair(b, a));
    } else
      tmp.push_back(make_pair(s, a));
  }
  for (int i = 0; i < ((int)qwe.size()); ++i) {
    int pos = qwe[i].first;
    int flag = qwe[i].second;
    used[pos] = 1;
    if (flag) {
      if (pos <= sum) {
        continue;
      }
      ar2.push_back(pos);
    } else {
      if (pos <= sum) ar1.push_back(pos);
    }
  }
  int asdqwe;
  for (int i = 999999; i; --i) {
    if (used1[i]) continue;
    asdqwe = i;
    break;
  }
  vector<int> fr1, fr2;
  for (int i = 1; i <= sum; ++i)
    if (!used[i]) fr1.push_back(i);
  for (int i = sum + 1; i <= n; ++i)
    if (!used[i]) fr2.push_back(i);
  if (fr1.empty() && fr2.empty() && ar1.size() && ar2.size()) {
    int a = ar1.back();
    ar1.pop_back();
    fr1.push_back(a);
    add_ans(get1(a), get1(asdqwe));
    tmp.push_back(make_pair(get1(asdqwe), 0));
  }
  while (ar1.size() || ar2.size()) {
    if (ar1.size() && fr2.size()) {
      int a = ar1.back();
      ar1.pop_back();
      int b = fr2.back();
      fr2.pop_back();
      add_ans(get1(a), get1(b));
      fr1.push_back(a);
    }
    if (ar2.size() && fr1.size()) {
      int a = ar2.back();
      ar2.pop_back();
      int b = fr1.back();
      fr1.pop_back();
      add_ans(get1(a), get1(b));
      fr2.push_back(a);
    }
  }
  for (int i = 0; i < (tmp.size()); ++i) {
    string a = tmp[i].first;
    int flag = tmp[i].second;
    if (flag) {
      int b = fr1.back();
      fr1.pop_back();
      add_ans(a, get1(b));
    } else {
      int b = fr2.back();
      fr2.pop_back();
      add_ans(a, get1(b));
    }
  }
  cout << ans.size() << '\n';
  for (int i = 0; i < ((int)ans.size()); ++i) cout << ans[i] << '\n';
  return 0;
}
