#include <bits/stdc++.h>
using namespace std;
struct unit {
  int x, y;
};
struct unit b[1100100];
int n, ans;
int a[30];
void move(int x, int y, int p) {
  while (p > 0) {
    ans++;
    b[ans].x = x;
    b[ans].y = y;
    p--;
  }
}
void work(int x, int y, int z, int p, int flag) {
  int i;
  i = p + 1;
  while (i <= n && a[i] == a[p]) i++;
  if (i == n + 1) {
    if (flag) {
      move(x, y, i - p - 1);
      move(x, z, 1);
      move(y, z, i - p - 1);
    } else
      move(x, z, i - p);
  } else if (flag == 0 || i == p + 1) {
    work(x, z, y, i, 0);
    move(x, z, i - p);
    work(y, x, z, i, 0);
  } else {
    work(x, y, z, i, 0);
    move(x, y, i - p);
    work(z, y, x, i, 0);
    move(y, z, i - p);
    work(x, y, z, i, 1);
  }
}
int main() {
  int i, j;
  scanf("%d", &n);
  for (i = 1; i <= n; i++) scanf("%d", &a[i]);
  work(1, 2, 3, 1, 1);
  printf("%d\n", ans);
  for (i = 1; i <= ans; i++) printf("%d %d\n", b[i].x, b[i].y);
  return 0;
}
