实在改不出来。
#include<bits/stdc++.h>
using namespace std;
int T,n,a[1000010],tot,pp;
char sum[1000010],ans[1000010];
deque<int>p;
deque<int>q;
void cheak(){
while(1){
if(p.empty()&&q.empty()) break;
if(q.empty()){
if(p.front()!=p.back()){
pp=1;
return;
}
sum[++tot]=sum[n*2-tot+1]='L';
p.pop_front();
p.pop_back();
continue;
}
if(p.empty()){
if(q.front()!=q.back()){
pp=1;
return;
}
sum[++tot]='R';
sum[n*2-tot+1]='R';
q.pop_back();
q.pop_front();
continue;
}
if(p.front()==p.back()&&p.size()>1){
sum[++tot]='L';
sum[n*2-tot+1]='L';
p.pop_back();
p.pop_front();
continue;
}
if(p.front()==q.back()){
sum[++tot]='L';
sum[n*2-tot+1]='R';
p.pop_front();
q.pop_back();
continue;
}
if(q.front()==q.back()&&q.size()>1){
sum[++tot]='R';
sum[n*2-tot+1]='R';
q.pop_back();
q.pop_front();
continue;
}
if(q.front()==p.back()){
sum[++tot]='R';
sum[n*2-tot+1]='L';
q.pop_front();
p.pop_back();
continue;
}
pp=1;
break;
}
}
bool cal(){
int ww=1;
while(ans[ww]==sum[ww]&&ww<=2*n) ww++;
return sum[ww]<ans[ww];
}
int main(){
cin>>T;
while(T--!=0){
cin>>n;
int x,y;
ans[1]='Z';
for(int i=1;i<=2*n;i++){
cin>>a[i];
if(a[i]==a[1]&&i!=1) x=i;
}
for(int i=1;i<2*n;i++){
if(a[i]==a[2*n]){
y=i;
break;
}
}
tot=0,pp=0;
sum[++tot]=sum[2*n]='L';
for(int i=2;i<x;i++) p.push_back(a[i]);
for(int i=2*n;i>x;i--) q.push_back(a[i]);
cheak();
p.clear();
q.clear();
if(pp==0&&cal()){
for(int i=1;i<=2*n;i++) ans[i]=sum[i];
}
tot=0,pp=0;
sum[++tot]='R';
sum[2*n]='L';
for(int i=1;i<y;i++) p.push_back(a[i]);
for(int i=2*n-1;i>y;i--) q.push_back(a[i]);
cheak();
p.clear();
q.clear();
if(pp==0&&cal()){
for(int i=1;i<=2*n;i++) ans[i]=sum[i];
}
if(ans[1]=='Z'){
cout<<"-1"<<endl;
continue;
}
for(int i=1;i<=2*n;i++) printf("%c",ans[i]);
cout<<endl;
}
return 0;
}