Загрузка данных


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()