#include <bits/stdc++.h>
using namespace std;
const int mod = 1e9 + 7;
const int maxn = 2e6 + 88;
const int inf = 1e9 + 88;
const int logn = 22;
const int maxa = 3e6 + 88;
const long long infll = 1e18 + 88;
const char sgl[5] = {'a', 'e', 'i', 'o', 'u'};
const int dx[] = {-1, 1, 0, 0};
const int dy[] = {0, 0, -1, 1};
const char sep = 'a' - 1;
const double eps = 1e-9;
int readint() {
  long long cur;
  scanf("%I64d", &cur);
  return cur;
}
vector<string> unused[2];
vector<int> need[2], used[2];
vector<pair<string, string> > ans;
bool is[maxn];
string s;
int stoi_(string s) {
  int res = 0;
  for (int i = 0; i < s.length(); i++) res = res * 10 + s[i] - '0';
  return res;
}
string itos_(int i) {
  string s = "";
  while (i) {
    s += (char)('0' + i % 10);
    i /= 10;
  }
  reverse(s.begin(), s.end());
  return s;
}
void solve() {
  int n, i, j;
  int t, cntunused = 0, cnt = 0;
  cin >> n;
  for (i = 0; i < n; i++) {
    cin >> s >> t;
    cnt += t;
    bool check = true;
    if (s[0] == '0') check = false;
    for (j = 0; j < s.length(); j++)
      if (s[j] < '0' || s[j] > '9') {
        check = false;
        break;
      }
    int cur = 0;
    if (check) cur = stoi_(s);
    if (cur < 1 || cur > n) {
      cntunused++;
      unused[t].push_back(s);
      continue;
    }
    used[t].push_back(cur);
    is[cur] = true;
  }
  for (i = 0; i < used[0].size(); i++)
    if (used[0][i] <= cnt) need[0].push_back(used[0][i]);
  for (i = 0; i < used[1].size(); i++)
    if (used[1][i] > cnt) need[1].push_back(used[1][i]);
  if (cntunused == 0) {
    if (need[0].size() == 0) {
      cout << 0;
      return;
    }
    ans.push_back({itos_(need[0].back()), itos_(n + 1)});
    unused[0].push_back(itos_(n + 1));
    is[need[0].back()] = false;
    need[0].pop_back();
  }
  int cur;
  for (i = 1; i <= n; i++)
    if (is[i] == false) {
      cur = i;
      break;
    }
  while (!is[cur])
    if (cur > cnt) {
      if (need[0].empty()) break;
      is[cur] = true;
      ans.push_back({itos_(need[0].back()), itos_(cur)});
      cur = need[0].back();
      need[0].pop_back();
      is[cur] = false;
    } else {
      if (need[1].empty()) break;
      is[cur] = true;
      ans.push_back({itos_(need[1].back()), itos_(cur)});
      cur = need[1].back();
      need[1].pop_back();
      is[cur] = false;
    }
  for (i = 1; i <= n; i++)
    if (!is[i]) {
      if (i > cnt && !need[0].empty()) {
        is[i] = true;
        is[need[0].back()] = false;
        ans.push_back({itos_(need[0].back()), itos_(i)});
        need[0].pop_back();
      }
      if (i <= cnt && !need[1].empty()) {
        is[i] = true;
        is[need[1].back()] = false;
        ans.push_back({itos_(need[1].back()), itos_(i)});
        need[1].pop_back();
      }
    }
  for (i = 1; i <= n; i++)
    if (!is[i]) {
      if (i > cnt) {
        is[i] = true;
        ans.push_back({unused[0].back(), itos_(i)});
        unused[0].pop_back();
      }
      if (i <= cnt) {
        is[i] = true;
        ans.push_back({unused[1].back(), itos_(i)});
        unused[1].pop_back();
      }
    }
  cout << ans.size() << "\n";
  for (i = 0; i < ans.size(); i++)
    cout << "move " << ans[i].first << " " << ans[i].second << "\n";
}
int main() {
  ios_base::sync_with_stdio(0);
  solve();
  return 0;
}
