#include <bits/stdc++.h>
using namespace std;
int n, m;
struct P {
  string s;
  int type, id;
} pp[100010], example[100010], test[100010];
int cnt1, cnt2, vis[100010];
inline int check(string s) {
  if (s[0] == '0') return -1;
  int res = 0;
  for (int i = 0; i < (s.length()); i++) {
    if (!isdigit(s[i])) return -1;
    res = res * 10 + s[i] - '0';
  }
  return res;
}
inline string go(int x) {
  string s = "";
  while (x) {
    s += (char)(x % 10 + '0');
    x /= 10;
  }
  reverse(s.begin(), s.end());
  return s;
}
pair<string, string> Ans[100010];
vector<int> kong_example, kong_test, error_example, error_test;
int main() {
  scanf("%d", &n);
  for (int i = 1; i <= n; i++) {
    cin >> pp[i].s >> pp[i].type;
    if (pp[i].type == 1)
      example[++cnt1] = pp[i];
    else
      test[++cnt2] = pp[i];
  }
  for (int i = 1; i <= cnt1; i++) {
    int tmp = check(example[i].s);
    if (tmp != -1 && tmp <= cnt1)
      vis[tmp] = 1, example[i].id = tmp;
    else if (tmp > cnt1 && tmp <= n)
      vis[tmp] = 1, error_example.push_back(i);
  }
  for (int i = 1; i <= cnt2; i++) {
    int tmp = check(test[i].s);
    if (tmp != -1 && tmp <= n && tmp > cnt1)
      vis[tmp] = 1, test[i].id = tmp;
    else if (tmp <= cnt1 && tmp >= 1)
      vis[tmp] = 1, error_test.push_back(i);
  }
  for (int i = 1; i <= cnt1; i++)
    if (vis[i] == 0) kong_example.push_back(i);
  for (int i = cnt1 + 1; i <= n; i++)
    if (vis[i] == 0) kong_test.push_back(i);
  int ans = 0;
  if (kong_example.size() == 0 && kong_test.size() == 0 && error_test.size()) {
    int tmp = error_test[error_test.size() - 1];
    error_test.pop_back();
    kong_example.push_back(check(test[tmp].s));
    Ans[++ans] = make_pair(test[tmp].s, "kugwzk");
    test[tmp].s = "kugwzk";
  }
  while (error_test.size() > 0 || error_example.size() > 0) {
    if (error_example.size() > 0 && kong_example.size() > 0) {
      int now = error_example.back();
      error_example.pop_back();
      int tmp = kong_example[kong_example.size() - 1];
      kong_example.pop_back();
      int tmp2 = check(example[now].s);
      if (tmp2 > cnt1 && tmp2 <= n) {
        kong_test.push_back(tmp2);
        vis[tmp2] = 0;
      }
      example[now].id = tmp;
      Ans[++ans] = make_pair(example[now].s, go(tmp));
    }
    if (error_test.size() && kong_test.size() > 0) {
      int now = error_test.back();
      error_test.pop_back();
      int tmp = kong_test[kong_test.size() - 1];
      kong_test.pop_back();
      int tmp2 = check(test[now].s);
      if (tmp2 <= cnt1 && tmp2 >= 1) {
        kong_example.push_back(tmp2);
        vis[tmp2] = 0;
      }
      test[now].id = tmp;
      Ans[++ans] = make_pair(test[now].s, go(tmp));
    }
  }
  for (int i = 1; i <= cnt1; i++) {
    if (example[i].id) continue;
    if (kong_example.size() != 0) {
      int tmp = kong_example[kong_example.size() - 1];
      kong_example.pop_back();
      int tmp2 = check(example[i].s);
      if (tmp2 > cnt1 && tmp2 <= n) {
        kong_test.push_back(tmp2);
        vis[tmp2] = 0;
      }
      Ans[++ans] = make_pair(example[i].s, go(tmp));
    }
  }
  for (int i = 1; i <= cnt2; i++) {
    if (test[i].id) continue;
    if (kong_test.size() != 0) {
      int tmp = kong_test[kong_test.size() - 1];
      kong_test.pop_back();
      Ans[++ans] = make_pair(test[i].s, go(tmp));
    }
  }
  printf("%d\n", ans);
  for (int i = 1; i <= ans; i++)
    cout << "move " << Ans[i].first << " " << Ans[i].second << endl;
}
