#include <bits/stdc++.h>
#pragma GCC target("avx2")
#pragma GCC optimize("O3")
#pragma GCC optimize("unroll-loops")
using namespace std;
template <class S, class T>
pair<S, T> operator+(const pair<S, T> &s, const pair<S, T> &t) {
  return pair<S, T>(s.first + t.first, s.second + t.second);
}
template <class S, class T>
pair<S, T> operator-(const pair<S, T> &s, const pair<S, T> &t) {
  return pair<S, T>(s.first - t.first, s.second - t.second);
}
template <class S, class T>
ostream &operator<<(ostream &os, pair<S, T> p) {
  os << "(" << p.first << ", " << p.second << ")";
  return os;
}
void YES(bool t = true) { cout << (t ? "YES" : "NO") << endl; }
void Yes(bool t = true) { cout << (t ? "Yes" : "No") << endl; }
void yes(bool t = true) { cout << (t ? "yes" : "no") << endl; }
void NO(bool t = true) { cout << (t ? "NO" : "YES") << endl; }
void No(bool t = true) { cout << (t ? "No" : "Yes") << endl; }
void no(bool t = true) { cout << (t ? "no" : "yes") << endl; }
template <class T>
bool chmax(T &a, const T &b) {
  if (a < b) {
    a = b;
    return 1;
  }
  return 0;
}
template <class T>
bool chmin(T &a, const T &b) {
  if (a > b) {
    a = b;
    return 1;
  }
  return 0;
}
const long long inf = 1000000001;
const long long INF = (long long)1e18 + 1;
const long double pi = 3.1415926535897932384626433832795028841971L;
int popcount(long long t) { return __builtin_popcountll(t); }
vector<int> dx = {0, 1, 0, -1}, dy = {-1, 0, 1, 0};
struct Setup_io {
  Setup_io() {
    ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0);
    cout << fixed << setprecision(25);
  }
} setup_io;
const long long MOD = 1000000007;
struct dice {
  mt19937 mt;
  dice() : mt(chrono::steady_clock::now().time_since_epoch().count()) {}
  long long operator()(long long x) { return this->operator()(0, x); }
  long long operator()(long long x, long long y) {
    uniform_int_distribution<long long> dist(x, y - 1);
    return dist(mt);
  }
  vector<long long> operator()(int n, long long x, long long y) {
    vector<long long> res(n);
    for (int i = 0; i < n; i++) res[i] = this->operator()(x, y);
    return res;
  }
} rnd;
set<string> used_name;
string new_name() {
  while (true) {
    string s;
    for (int i = 0; i < (int)(6); i++) s += (char)('a' + rnd(26));
    if (used_name.count(s) == 0) {
      used_name.insert(s);
      return s;
    }
  }
}
signed main() {
  int n;
  cin >> n;
  vector<string> s(n);
  vector<int> a(n);
  int e = 0;
  for (int i = 0; i < (int)(n); i++) {
    cin >> s[i] >> a[i];
    used_name.insert(s[i]);
    if (a[i] == 1) e++;
  }
  set<string> emp;
  set<string> ex, te;
  for (int i = 1; i <= e; i++) {
    ex.insert(to_string(i));
    emp.insert(to_string(i));
  }
  for (int i = e + 1; i <= n; i++) {
    te.insert(to_string(i));
    emp.insert(to_string(i));
  }
  for (int i = 0; i < (int)(n); i++) {
    emp.erase(s[i]);
  }
  vector<string> t;
  vector<int> b;
  for (int i = 0; i < (int)(n); i++) {
    if (ex.count(s[i]) and a[i] == 1) continue;
    if (te.count(s[i]) and a[i] == 0) continue;
    t.push_back(s[i]);
    b.push_back(a[i]);
  }
  if (t.size() == 0) {
    cout << 0 << endl;
    return 0;
  }
  string last;
  vector<pair<string, string>> op;
  if (emp.size() == 0) {
    string temp = new_name();
    op.push_back({t[0], temp});
    emp.insert(t[0]);
    t[0] = temp;
    last = temp;
  } else {
    for (int i = 0; i < (int)(t.size()); i++) {
      if (ex.count(t[i]) == 0 and te.count(t[i]) == 0) {
        last = t[i];
        break;
      }
    }
  }
  vector<vector<string>> u(2);
  for (int i = 0; i < (int)(t.size()); i++) {
    u[b[i]].push_back(t[i]);
  }
  auto itr = emp.begin();
  while (u[0].size() + u[1].size() > 1) {
    string tar = *itr;
    itr++;
    int ba;
    if (te.count(tar))
      ba = 0;
    else
      ba = 1;
    for (int i = (int)(u[ba].size()) - 1; i >= 0; i--) {
      if (u[ba][i] == last) continue;
      string ori = u[ba][i];
      op.push_back({ori, tar});
      emp.erase(tar);
      if (ex.count(ori) or te.count(ori)) {
        emp.insert(ori);
      }
      u[ba].erase(u[ba].begin() + i);
      itr = emp.begin();
      break;
    }
  }
  assert(emp.size() == 1);
  string rem = *emp.begin();
  op.push_back({last, rem});
  cout << op.size() << endl;
  for (int i = 0; i < (int)(op.size()); i++) {
    auto [u, v] = op[i];
    cout << "move " << u << " " << v << endl;
  }
}
