#include <bits/stdc++.h>
using namespace std;
const int N = 3e5 + 3;
const int inf = 1e9 + 3;
const int md = 1e9 + 7;
const long long linf = 1e18 + 3;
int n, m, kl1, kl0, sm1, sm0;
string a[100002];
bool v[100002];
bool g;
bool num[100002];
bool used[100002];
bool used2[100002];
int u[100002];
int nor[100002];
string lev;
map<int, bool> godno;
vector<pair<int, int> > p;
int num1, num0;
set<int> st1, st0, st3, st4;
vector<pair<string, string> > ans;
string tostring(int a) {
  string res = "";
  while (a) {
    res += "0";
    res[res.size() - 1] += a % 10;
    a /= 10;
  }
  reverse(res.begin(), res.end());
  return res;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  cin >> n;
  for (int i = 1; i <= n; ++i) {
    cin >> a[i] >> g;
    v[i] = g;
    if (g == 1)
      kl1++;
    else
      kl0++;
  }
  for (int i = 1; i <= kl1; ++i) {
    num[i] = 1;
  }
  for (int i = 1; i <= n; ++i) {
    bool f = true;
    int res = 0;
    for (int j = 0; j < a[i].size(); ++j) {
      if (!(a[i][j] >= '0' && a[i][j] <= '9')) {
        f = false;
        break;
      }
      res *= 10;
      res += (a[i][j] - '0');
    }
    if (a[i][0] == '0') continue;
    if (f && res <= n && res >= 1) {
      if (num[res] == v[i]) {
        used[res] = true;
      } else {
        if (v[i] == 1)
          st3.insert(res);
        else
          st4.insert(res);
        u[res] = i;
      }
      nor[i] = res;
    }
    if (f) {
      godno[res] = true;
    }
  }
  for (int i = 999999; i >= 1; i--) {
    if (!godno[i]) {
      lev = tostring(i);
      break;
    }
  }
  for (int i = 1; i <= n; ++i) {
    if (u[i] == 0 && !used[i]) {
      if (num[i] == 1)
        st1.insert(i);
      else
        st0.insert(i);
    }
  }
  int gg, g1, g2;
  while (true) {
    gg = 0;
    if (st3.size() > 0 && st1.size() > 0) {
      gg++;
      g1 = *st3.begin();
      st3.erase(st3.begin());
      g2 = *st1.begin();
      st1.erase(st1.begin());
      ans.push_back(make_pair(tostring(g1), tostring(g2)));
      st0.insert(g1);
    }
    if (st4.size() > 0 && st0.size() > 0) {
      gg++;
      g1 = *st4.begin();
      st4.erase(st4.begin());
      g2 = *st0.begin();
      st0.erase(st0.begin());
      ans.push_back(make_pair(tostring(g1), tostring(g2)));
      st1.insert(g1);
    }
    if (gg == 0) {
      if (st4.size() > 0 || st3.size() > 0) {
        g1 = (*st4.begin());
        st4.erase(st4.begin());
        ans.push_back(make_pair(tostring(g1), lev));
        g2 = (*st3.begin());
        st3.erase(st3.begin());
        ans.push_back(make_pair(tostring(g2), tostring(g1)));
        st0.insert(g2);
        int z2 = g2;
        while (true) {
          gg = 0;
          if (st3.size() > 0 && st1.size() > 0) {
            gg++;
            g1 = *st3.begin();
            st3.erase(st3.begin());
            g2 = *st1.begin();
            st1.erase(st1.begin());
            ans.push_back(make_pair(tostring(g1), tostring(g2)));
            st0.insert(g1);
          }
          if (st4.size() > 0 && st0.size() > 0) {
            gg++;
            g1 = *st4.begin();
            st4.erase(st4.begin());
            g2 = *st0.begin();
            st0.erase(st0.begin());
            ans.push_back(make_pair(tostring(g1), tostring(g2)));
            st1.insert(g1);
          }
          if (gg == 0) break;
        }
        z2 = (*st0.begin());
        st0.erase(st0.begin());
        ans.push_back(make_pair(lev, tostring(z2)));
      } else
        break;
    }
  }
  for (int i = 1; i <= n; ++i) {
    if (nor[i] == 0) {
      if (v[i] == 1) {
        g1 = (*st1.begin());
        st1.erase(st1.begin());
        ans.push_back(make_pair(a[i], tostring(g1)));
      } else {
        g1 = (*st0.begin());
        st0.erase(st0.begin());
        ans.push_back(make_pair(a[i], tostring(g1)));
      }
    }
  }
  cout << ans.size() << '\n';
  for (int i = 0; i < ans.size(); ++i) {
    cout << "move " << ans[i].first << " " << ans[i].second << '\n';
  }
}
