#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 7;
const int inf = 0x3f3f3f3f;
const long long INF = 0x3f3f3f3f3f3f3f3f;
const int mod = 1000000007;
const double eps = 1e-6;
const double PI = acos(-1);
int n, c[2];
unordered_map<string, int> StrDig;
unordered_map<int, string> DigStr;
pair<string, int> a[N];
string ext = "xxoo";
vector<pair<string, string>> ans;
queue<pair<string, int>> out[2];
queue<pair<string, int>> in[2];
queue<pair<string, int>> one;
queue<pair<string, int>> zero;
bool vis[N];
int main() {
  cin >> n;
  for (int i = 1; i <= n; i++) {
    string s;
    for (int x = i; x; x /= 10) s.push_back((x % 10) + '0');
    reverse(s.begin(), s.end());
    StrDig[s] = i;
    DigStr[i] = s;
  }
  for (int i = 1; i <= n; i++) {
    cin >> a[i].first >> a[i].second;
    c[a[i].second]++;
  }
  for (int i = 1; i <= n; i++) {
    if (StrDig.find(a[i].first) == StrDig.end()) {
      out[a[i].second].push(a[i]);
    } else {
      if (a[i].second == 1) {
        if (StrDig[a[i].first] > c[1]) {
          vis[StrDig[a[i].first]] = true;
          in[1].push(a[i]);
        } else {
          vis[StrDig[a[i].first]] = true;
        }
      } else {
        if (StrDig[a[i].first] <= c[1]) {
          vis[StrDig[a[i].first]] = true;
          in[0].push(a[i]);
        } else {
          vis[StrDig[a[i].first]] = true;
        }
      }
    }
  }
  for (int i = 1; i <= c[1]; i++)
    if (!vis[i]) one.push(make_pair(DigStr[i], i));
  for (int i = c[1] + 1; i <= n; i++)
    if (!vis[i]) zero.push(make_pair(DigStr[i], i));
  if (!((int)out[0].size()) && !((int)in[0].size()) && !((int)out[1].size()) &&
      !((int)in[1].size())) {
    puts("0");
    return 0;
  }
  if (!((int)out[0].size()) && !((int)out[1].size())) {
    if (((int)in[0].size())) {
      pair<string, int> x = in[0].front();
      in[0].pop();
      ans.push_back(make_pair(x.first, ext));
      out[x.second].push(make_pair(ext, x.second));
      one.push(make_pair(x.first, StrDig[x.first]));
    } else {
      pair<string, int> x = in[1].front();
      in[1].pop();
      ans.push_back(make_pair(x.first, ext));
      out[x.second].push(make_pair(ext, x.second));
      zero.push(make_pair(x.first, StrDig[x.first]));
    }
  }
  while (((int)in[0].size()) && ((int)zero.size()) ||
         ((int)in[1].size()) && ((int)one.size())) {
    if (((int)in[0].size()) && ((int)zero.size())) {
      pair<string, int> x = in[0].front();
      in[0].pop();
      pair<string, int> y = zero.front();
      zero.pop();
      ans.push_back(make_pair(x.first, y.first));
      one.push(make_pair(x.first, StrDig[x.first]));
    }
    if (((int)in[1].size()) && ((int)one.size())) {
      pair<string, int> x = in[1].front();
      in[1].pop();
      pair<string, int> y = one.front();
      one.pop();
      ans.push_back(make_pair(x.first, y.first));
      zero.push(make_pair(x.first, StrDig[x.first]));
    }
  }
  while (((int)out[0].size()) && ((int)zero.size())) {
    pair<string, int> x = out[0].front();
    out[0].pop();
    pair<string, int> y = zero.front();
    zero.pop();
    ans.push_back(make_pair(x.first, y.first));
  }
  while (((int)out[1].size()) && ((int)one.size())) {
    pair<string, int> x = out[1].front();
    out[1].pop();
    pair<string, int> y = one.front();
    one.pop();
    ans.push_back(make_pair(x.first, y.first));
  }
  printf("%d\n", ((int)ans.size()));
  for (auto& t : ans)
    cout << "move"
         << " " << t.first << " " << t.second << "\n";
  return 0;
}
