// 我不行了 ,瞎写的代码我自己都没看懂,居然就这么过了。。。。。。
// 将每次k大坨从src位置移动到dest位置,中间经过mid的过程分为3个步骤
// 第一步,将k-1大坨从src移动到mid
// 第二步,将最底下那个垫片移动到dest
// 第三步,将k-1大坨从mid移动到dest

// 注意递归的含义是将to_move个垫片进行移动,如果数量为0,那么自然就应该终止递归了
// recursion是移动一大坨这个动作
// cout << src <<' '<<dest<<'\n';是移动一小片
// 再次recursion又把一大坨移动到了dest

#include <iostream>
using namespace std;


void recursion(int n,int to_move,char src,char dest,char mid)
{
    if (to_move == 0)
        return ;
    
    // 首先理解你的函数的用意
    // 这里的目标是要把一部分从src搬到mid
    // 把最下面一个垫片从src搬到dest
    // 然后再把mid上的搬回到dest上
    recursion(n,to_move-1,src,mid,dest);
    cout<<src<<' '<<dest<<'\n';
    recursion(n,to_move-1,mid,dest,src);
}

int main() {
    int n;
    cin>>n;
    recursion(n,n,'A','C','B');
    return 0;
}