#include <bits/stdc++.h>
using namespace std;
const int mn = 1200000;
int n, L, la;
int a[mn];
pair<int, int> f[mn];
void simp(int r, int s, int t) {
  int k = s ^ t, i;
  if (r == n) {
    for (i = 1; i <= a[r]; ++i) f[++L] = make_pair(s, t);
    return;
  }
  simp(r + 1, s, k);
  for (i = 1; i <= a[r]; ++i) f[++L] = make_pair(s, t);
  simp(r + 1, k, t);
}
void dfs(int r, int s, int t) {
  int k = s ^ t, i;
  if (r == n) {
    for (i = 1; i <= a[r] - 1; ++i) f[++L] = make_pair(s, k);
    f[++L] = make_pair(s, t);
    for (i = 1; i <= a[r] - 1; ++i) f[++L] = make_pair(k, t);
    return;
  }
  if (a[r] == 1) {
    simp(r, s, t);
    return;
  }
  simp(r + 1, s, t);
  for (i = 1; i <= a[r]; ++i) f[++L] = make_pair(s, k);
  simp(r + 1, t, s);
  for (i = 1; i <= a[r]; ++i) f[++L] = make_pair(k, t);
  dfs(r + 1, s, t);
}
int main() {
  scanf("%d", &n);
  int i, v;
  L = 0, la = 0;
  for (i = 1; i <= n; ++i) {
    scanf("%d", &v);
    if (v != la) ++L;
    ++a[L], la = v;
  }
  n = L, L = 0;
  dfs(1, 1, 3);
  printf("%d\n", L);
  for (i = 1; i <= L; ++i) printf("%d %d\n", f[i].first, f[i].second);
  return 0;
}
