#include <bits/stdc++.h>
using namespace std;
bool esNumero(string &a) {
  if (a[0] == '0') return false;
  for (int i = 0; i < a.size(); i++) {
    if (a[i] != '0' && a[i] != '1' && a[i] != '2' && a[i] != '3' &&
        a[i] != '4' && a[i] != '5' && a[i] != '6' && a[i] != '7' &&
        a[i] != '8' && a[i] != '9')
      return false;
  }
  return true;
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  int n;
  cin >> n;
  vector<pair<string, int>> tests(n);
  vector<int> pos(n + 1, -1);
  int examples = 0;
  for (int i = 0; i < n; i++) {
    cin >> tests[i].first >> tests[i].second;
    if (tests[i].second) examples++;
  }
  int free = n, correct = 0;
  vector<pair<int, int>> left, right;
  set<int> freeL, freeR;
  for (int i = 0; i < examples; i++) {
    freeL.insert(i);
  }
  for (long long int i = examples; i <= n - 1; i++) {
    freeR.insert(i);
  }
  for (int i = 0; i < n; i++) {
    if (!esNumero(tests[i].first)) {
      if (tests[i].second)
        left.push_back(pair<int, int>(1, i));
      else
        right.push_back(pair<int, int>(1, i));
      continue;
    }
    int conv = stoi(tests[i].first);
    if (conv <= n && conv >= 1) {
      free--;
      if ((conv <= examples && tests[i].second) ||
          (conv > examples && !tests[i].second)) {
        pos[conv - 1] = 1;
        correct++;
      } else {
        pos[conv - 1] = 0;
        if (tests[i].second)
          left.push_back(pair<int, int>(0, i));
        else
          right.push_back(pair<int, int>(0, i));
      }
      if (conv <= examples) {
        freeL.erase(freeL.find(conv - 1));
      } else
        freeR.erase(freeR.find(conv - 1));
    } else {
      if (tests[i].second)
        left.push_back(pair<int, int>(1, i));
      else
        right.push_back(pair<int, int>(1, i));
    }
  }
  sort(left.begin(), left.end());
  sort(right.begin(), right.end());
  int i_l = 0, i_r = 0;
  if (free == 0) {
    if (correct == n) {
      cout << "0\n";
      return 0;
    }
    cout << n - correct + 1 << '\n';
    pair<int, int> liber = left[i_l];
    i_l++;
    cout << "move " << tests[liber.second].first << " 0kn0be\n";
    freeR.insert(stoi(tests[liber.second].first) - 1);
    while (true) {
      bool stop = true;
      if (i_r < right.size()) {
        if (right[i_r].first != 1) {
          pair<int, int> a = right[i_r];
          if (!freeR.empty()) {
            int available = *freeR.begin();
            cout << "move " << tests[a.second].first << " " << available + 1
                 << '\n';
            freeL.insert(stoi(tests[a.second].first) - 1);
            i_r++;
            freeR.erase(freeR.begin());
          }
          stop = false;
        }
      }
      if (i_l < left.size()) {
        if (left[i_l].first != 1) {
          pair<int, int> a = left[i_l];
          if (!freeL.empty()) {
            int available = *freeL.begin();
            cout << "move " << tests[a.second].first << " " << available + 1
                 << '\n';
            freeR.insert(stoi(tests[a.second].first) - 1);
            i_l++;
            freeL.erase(freeL.begin());
          }
          stop = false;
        }
      }
      if (stop) break;
    }
    int aux = *freeL.begin();
    cout << "move "
         << "0kn0be"
         << " " << aux + 1 << '\n';
    freeL.erase(freeL.begin());
  } else {
    cout << n - correct << '\n';
    while (true) {
      bool stop = true;
      if (i_r < right.size()) {
        if (right[i_r].first != 1) {
          pair<int, int> a = right[i_r];
          if (!freeR.empty()) {
            int available = *freeR.begin();
            cout << "move " << tests[a.second].first << " " << available + 1
                 << '\n';
            freeL.insert(stoi(tests[a.second].first) - 1);
            i_r++;
            freeR.erase(freeR.begin());
          }
          stop = false;
        }
      }
      if (i_l < left.size()) {
        if (left[i_l].first != 1) {
          pair<int, int> a = left[i_l];
          if (!freeL.empty()) {
            int available = *freeL.begin();
            cout << "move " << tests[a.second].first << " " << available + 1
                 << '\n';
            freeR.insert(stoi(tests[a.second].first) - 1);
            i_l++;
            freeL.erase(freeL.begin());
          }
          stop = false;
        }
      }
      if (stop) break;
    }
    while (i_l < left.size()) {
      pair<int, int> a = left[i_l];
      i_l++;
      int available = *freeL.begin();
      cout << "move " << tests[a.second].first << " " << available + 1 << '\n';
      freeL.erase(freeL.begin());
    }
    while (i_r < right.size()) {
      pair<int, int> a = right[i_r];
      i_r++;
      int available = *freeR.begin();
      cout << "move " << tests[a.second].first << " " << available + 1 << '\n';
      freeR.erase(freeR.begin());
    }
  }
  return 0;
}
