rt,开O2RE,不开O2TLE,为啥啊呜呜呜┭┮﹏┭┮
#include<bits/stdc++.h>
using namespace std;
#define re register
inline int read();
inline void wn(int x);
inline void wi(int x);
inline void wr(int x);
vector<int> a[4];
set<int> A[4];
pair <char,char> b[1000100];
int p[40040];
int cnt;
void Fit(int x)
{
int group=0,i=0;
set<int>::iterator it;
it=A[0].find(x);
if(it==A[0].end()) group=1;
int s=a[group].size()-1;
while(a[group][s]!=x)
{
a[group^1].push_back(a[group][s]);
A[group].erase(a[group][s]);
A[group^1].insert(a[group][s]);
s--,a[group].pop_back();
cnt++;
b[cnt].first=(char)('A'+group);
b[cnt].second=(char)('A'+(group^1));
}
a[group].pop_back();
cnt++;
b[cnt].first=(char)('A'+group);
b[cnt].second='C';
}
signed main()
{
//freopen("a.in","r",stdin);
//freopen("a.out","w",stdout);
//printf("%d M\n",((sizeof(z))>>20));
int n=read();
for(re int i=1;i<=n;++i) p[i]=read();
for(re int i=n;i>=1;--i) a[0].push_back(p[i]),A[0].insert(p[i]);
for(re int i=n;i>=1;--i) Fit(i);
cout<<cnt<<endl;
for(re int i=1;i<=cnt;++i) cout<<b[i].first<<' '<<b[i].second<<'\n';
return 0;
}
//========================================================================================================================
inline int read()
{
int f=1,x=0;
char ch=getchar();
while(ch<'0'||ch>'9')
{
if(ch=='-') f=-1;
ch=getchar();
}
while(ch>='0'&&ch<='9')
{
x=(x<<3)+(x<<1)+ch-'0';
ch=getchar();
}
return x*f;
}
inline void wn(int x)
{
if(x<0)
{
putchar('-');
wn(-x);
return ;
}
if(x>=10) wn(x/10);
putchar('0'+x%10);
}
inline void wi(int x){wn(x),putchar(' ');}
inline void wr(int x){wn(x),putchar('\n');}