代码
#include<bits/stdc++.h>
using namespace std;
int T;
int n;
int a[500713];
int bz[500713];
struct seque{
int dl[5000713],head=1,tail=0;
void add(int x) {dl[++tail]=x;}
int h_c() {return dl[head];}
int t_c() {return dl[tail];}
void h_g() {head++;}
void t_g() {tail--;}
bool empty() {return head>tail?1:0;}
}q,p;
signed main()
{
freopen("P7915_17.in","r",stdin);
freopen("17.out","w",stdout);
cin>>T;
while(T--)
{
while(!q.empty()) q.h_g();
while(!p.empty()) p.h_g();
scanf("%d",&n);n*=2;
for(int i=1;i<=n;i++) scanf("%d",&a[i]);
//L
bz[1]=1;bz[n]=1;
int h=a[1];
for(int i=2;i<=n;i++) if(h==a[i]) {h=i;break;}
for(int i=2;i<h;i++) q.add(a[i]);
for(int i=n;i>h;i--) p.add(a[i]);
int cnt=2,flag=1;
while(!q.empty()&&!p.empty())
{
flag=0;
if(q.h_c()==q.t_c()&&q.head!=q.tail)
bz[cnt]=1,bz[n-cnt+1]=1,
q.h_g(),q.t_g(),
flag=1;
else
if(q.h_c()==p.t_c())
bz[cnt]=1,bz[n-cnt+1]=2,
q.h_g(),p.t_g(),
flag=1;
else
if(p.h_c()==q.t_c())
bz[cnt]=2,bz[n-cnt+1]=1,
p.h_g(),q.t_g(),
flag=1;
else
if(p.h_c()==p.t_c()&&p.head!=p.tail)
bz[cnt]=2,bz[n-cnt+1]=2,
p.h_g(),p.t_g(),
flag=1;
if(flag==0) break;
cnt++;
}
if(flag!=0)
{
if(!q.empty())
{
while(!q.empty())
{
flag=0;
if(q.h_c()==q.t_c())
bz[cnt]=1,bz[n-cnt+1]=1,
q.h_g(),q.t_g(),
flag=1;
else
break;
cnt++;
}
}
if(!p.empty())
{
while(!p.empty())
{
flag=0;
if(p.h_c()==p.t_c())
bz[cnt]=2,bz[n-cnt+1]=2,
p.h_g(),p.t_g(),
flag=1;
else
break;
cnt++;
}
}
if(flag!=0)
{
for(int i=1;i<=n;i++)
{
if(bz[i]==1)
printf("L");
if(bz[i]==2)
printf("R");
if(bz[i]==0)
printf("E");
}
printf("\n");
continue;
}
}
while(!q.empty()) q.h_g();
while(!p.empty()) p.h_g();
//R
bz[1]=2;bz[n]=1;
h=a[n];
for(int i=1;i<n;i++) if(h==a[i]) {h=i;break;}
for(int i=1;i<h;i++) q.add(a[i]);
for(int i=n-1;i>h;i--) p.add(a[i]);
cnt=2,flag=1;
while(!q.empty()&&!p.empty())
{
flag=0;
printf("q->%d %d p->%d %d\n",q.h_c(),q.t_c(),p.h_c(),p.t_c());
if(q.h_c()==q.t_c()&&q.head!=q.tail)
bz[cnt]=1,bz[n-cnt+1]=1,
q.h_g(),q.t_g(),
flag=1;
else
if(q.h_c()==p.t_c())
bz[cnt]=1,bz[n-cnt+1]=2,
q.h_g(),p.t_g(),
flag=1;
else
if(p.h_c()==q.t_c())
bz[cnt]=2,bz[n-cnt+1]=1,
p.h_g(),q.t_g(),
flag=1;
else
if(p.h_c()==p.t_c()&&p.head!=p.tail)
bz[cnt]=2,bz[n-cnt+1]=2,
p.h_g(),p.t_g(),
flag=1;
if(flag==0) break;
// cout<<"error\n";
cnt++;
}
if(flag!=0)
{
if(!q.empty())
{
while(!q.empty())
{
flag=0;
if(q.h_c()==q.t_c())
bz[cnt]=1,bz[n-cnt+1]=1,
q.h_g(),q.t_g(),
flag=1;
else
break;
cnt++;
}
}
if(!p.empty())
{
while(!p.empty())
{
flag=0;
if(p.h_c()==p.t_c())
bz[cnt]=2,bz[n-cnt+1]=2,
p.h_g(),p.t_g(),
flag=1;
else
break;
cnt++;
}
}
if(flag!=0)
{
for(int i=1;i<=n;i++)
{
if(bz[i]==1)
printf("L");
if(bz[i]==2)
printf("R");
if(bz[i]==0)
printf("E");
}
printf("\n");
}
}
if(flag==0)
printf("-1\n");
}
return 0;
}
/*
1
10
4 9 3 10 10 1 4 2 7 6 8 5 9 3 1 5 8 6 7 2
*/