#include <bits/stdc++.h>
using namespace std;
bool debug = 0;
int n, m, k;
int dx[4] = {0, 1, 0, -1}, dy[4] = {1, 0, -1, 0};
string direc = "RDLU";
long long ln, lk, lm;
void etp(bool f = 0) {
  puts(f ? "YES" : "NO");
  exit(0);
}
void addmod(int &x, int y, int mod = 1000000007) {
  assert(y >= 0);
  x += y;
  if (x >= mod) x -= mod;
  assert(x >= 0 && x < mod);
}
void et() {
  puts("-1");
  exit(0);
}
long long fastPow(long long x, long long y, int mod = 1000000007) {
  long long ans = 1;
  while (y > 0) {
    if (y & 1) ans = (x * ans) % mod;
    x = x * x % mod;
    y >>= 1;
  }
  return ans;
}
string ins[100005];
int w[100005];
vector<pair<string, string>> ans;
int E;
set<string> sa[2], sb[2], all;
vector<string> vp[2];
string Free;
void fmain(int tid) {
  ios::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  cin >> n;
  for (int(i) = 1; (i) <= (int)(n); (i)++) {
    cin >> ins[i] >> w[i];
    E += w[i];
    all.insert(ins[i]);
  }
  for (int(i) = 1; (i) <= (int)(E); (i)++) sa[1].insert(to_string(i));
  for (int i = E + 1; i <= n; i++) sa[0].insert(to_string(i));
  for (int i = n + 1; i <= n + n + 10; i++) {
    Free = to_string(i);
    if (all.find(Free) == all.end()) break;
  }
  for (int(i) = 1; (i) <= (int)(n); (i)++) {
    if (sa[w[i]].count(ins[i]))
      sa[w[i]].erase(ins[i]);
    else if (sa[w[i] ^ 1].count(ins[i])) {
      sb[w[i]].insert(ins[i]);
      sa[w[i] ^ 1].erase(ins[i]);
    } else
      vp[w[i]].push_back(ins[i]);
  }
  while (!sb[0].empty() || !sb[1].empty()) {
    if (!sb[0].empty() && !sa[0].empty()) {
      ans.push_back({*sb[0].begin(), *sa[0].begin()});
      sa[0].erase(sa[0].begin());
      sa[1].insert(*sb[0].begin());
      sb[0].erase(sb[0].begin());
    } else if (!sb[1].empty() && !sa[1].empty()) {
      ans.push_back({*sb[1].begin(), *sa[1].begin()});
      sa[1].erase(sa[1].begin());
      sa[0].insert(*sb[1].begin());
      sb[1].erase(sb[1].begin());
    } else {
      assert(!sb[0].empty() && !sb[1].empty());
      ans.push_back({*sb[1].begin(), Free});
      vp[1].push_back(Free);
      sa[0].insert(*sb[1].begin());
      sb[1].erase(sb[1].begin());
    }
  }
  for (int(i) = 0; (i) < (int)(2); (i)++)
    for (string tmp : vp[i]) {
      assert(!sa[i].empty());
      ans.push_back({tmp, *sa[i].begin()});
      sa[i].erase(sa[i].begin());
    }
  cout << ans.size() << endl;
  for (auto p : ans) {
    cout << "move " << p.first << " " << p.second << endl;
  }
}
int main() {
  int t = 1;
  for (int(i) = 1; (i) <= (int)(t); (i)++) {
    fmain(i);
  }
  return 0;
}
