#include <bits/stdc++.h>
using namespace std;
struct ww {
  int x, y;
} an[(1 << 20)], tt[(1 << 20)];
int i, j, k, n, m, s, u, t, re;
int a[30], b[30], c[30];
inline void Do(int n, int x, int y) {
  int i;
  for (i = 1; i <= n; i++) an[++re] = (ww){x + 1, y + 1};
}
void dfs(int n, int x, int y, int ty) {
  if (n > s) return;
  int i;
  for (i = 0; i <= 2; i++)
    if (i != x && i != y) break;
  if (ty && b[n] > 1 && c[n] % 2 == 0) {
    if (n == s) {
      Do(b[n] - 1, x, i);
      Do(1, x, y);
      Do(b[n] - 1, i, y);
      return;
    }
    dfs(n + 1, x, y, 0);
    Do(b[n], x, i);
    dfs(n + 1, y, x, 0);
    Do(b[n], i, y);
    dfs(n + 1, x, y, 1);
  } else {
    dfs(n + 1, x, i, 0);
    c[n] ^= 1;
    Do(b[n], x, y);
    dfs(n + 1, i, y, ty & 1);
  }
}
int main() {
  scanf("%d", &n);
  for (i = 1; i <= n; i++) {
    scanf("%d", &k);
    if (a[s] != k)
      a[++s] = k, b[s] = 1;
    else
      b[s]++;
  }
  dfs(1, 0, 2, 1);
  printf("%d\n", re);
  for (i = 1; i <= re; i++) printf("%d %d\n", an[i].x, an[i].y);
  return 0;
}
