#include <bits/stdc++.h>
using namespace std;
const int N = int(1e5) + 5;
const int inf = (int)1e9 + 7;
const long long linf = (long long)1e18 + 7;
int n;
string nm[N];
int tp[N];
vector<int> bad;
vector<string> h1, h2;
map<string, int> u, now, id;
vector<string> ans;
string to_str(int x) {
  string wow;
  while (x > 0) {
    wow += char(x % 10 + '0');
    x /= 10;
  }
  reverse(wow.begin(), wow.end());
  return wow;
}
int isgood(string x) {
  if (x[0] == '0') {
    return 0;
  }
  int f = 0;
  for (int i = 0; i < (int)x.size(); ++i) {
    if (!isdigit(x[i])) {
      return 0;
    }
    f = f * 10 + x[i] - '0';
  }
  return f > 0 && f <= n;
}
string randgen() {
  while (true) {
    string here = "";
    for (int i = 1; i <= 6; ++i) {
      here += char(rand() % 26 + 'a');
    }
    if (!u[here]) {
      return here;
    }
  }
  return "";
}
int main() {
  ios_base ::sync_with_stdio(false);
  cin.tie(nullptr);
  cin >> n;
  int tot = 0;
  for (int i = 1; i <= n; ++i) {
    cin >> nm[i] >> tp[i];
    id[nm[i]] = i;
    tot += tp[i];
    u[nm[i]] = 1;
    if (isgood(nm[i])) {
      now[nm[i]] = tp[i];
    } else {
      bad.push_back(i);
    }
  }
  vector<string> r1, r2;
  int all = 1;
  for (int i = 1; i <= tot; ++i) {
    string e = to_str(i);
    if (!now.count(e)) {
      h1.push_back(e);
      all = 0;
      continue;
    }
    if (now[e] == 1) {
      continue;
    } else {
      r1.push_back(e);
    }
  }
  for (int i = tot + 1; i <= n; ++i) {
    string e = to_str(i);
    if (!now.count(e)) {
      h2.push_back(e);
      all = 0;
      continue;
    }
    if (now[e] == 0) {
      continue;
    } else {
      r2.push_back(e);
    }
  }
  if (all && (!r1.empty() || !r2.empty())) {
    string to = randgen();
    ans.push_back("move " + r1.back() + " " + to);
    h1.push_back(r1.back());
    bad.push_back(id[r1.back()]);
    nm[id[r1.back()]] = to;
    r1.pop_back();
  }
  int done = 1;
  while (done) {
    done = 0;
    while (!r1.empty() && !h2.empty()) {
      ans.push_back("move " + r1.back() + " " + h2.back());
      h1.push_back(r1.back());
      r1.pop_back();
      h2.pop_back();
      done = 1;
    }
    while (!r2.empty() && !h1.empty()) {
      ans.push_back("move " + r2.back() + " " + h1.back());
      h2.push_back(r2.back());
      r2.pop_back();
      h1.pop_back();
      done = 1;
    }
  }
  for (int i : bad) {
    if (tp[i]) {
      ans.push_back("move " + nm[i] + " " + h1.back());
      h1.pop_back();
    } else {
      ans.push_back("move " + nm[i] + " " + h2.back());
      h2.pop_back();
    }
  }
  cout << (int)ans.size() << "\n";
  for (auto i : ans) {
    cout << i << "\n";
  }
  return 0;
}
