import sys
# Увеличиваем лимит рекурсии на всякий случай (для n<=10 не обязательно, но безопасно)
sys.setrecursionlimit(2000)
def hanoi(n, source, auxiliary, target):
"""Рекурсивная функция для перемещения n дисков с source на target через auxiliary"""
if n == 1:
# Базовый случай: один диск просто перекладываем
print(f"{source} {target}")
return
# 1. Перемещаем n-1 дисков с исходного стержня на вспомогательный
hanoi(n - 1, source, target, auxiliary)
# 2. Перемещаем самый большой диск с исходного на целевой
print(f"{source} {target}")
# 3. Перемещаем n-1 дисков со вспомогательного на целевой
hanoi(n - 1, auxiliary, source, target)
def main():
# Читаем входные данные
input_data = sys.stdin.read().split()
if not input_data:
return
n = int(input_data[0])
# Общее количество ходов для n дисков всегда равно 2^n - 1
k = (1 << n) - 1
print(k)
# Запускаем решение: переносим n дисков со стержня 1 на стержень 3 через стержень 2
hanoi(n, 1, 2, 3)
if __name__ == "__main__":
main()