代码:
#include<bits/stdc++.h>
using namespace std;
const int N=200001;
int T,n,a[N],ans[N];
struct node
{
int k;
node *last,*next;
}f[N],*sta,*end;
int read()
{
int ret=0;
char ch=getchar();
while(ch<'0'||ch>'9') ch=getchar();
while(ch>='0'&&ch<='9'){ret=ret*10+(int)(ch-48);ch=getchar();}
return ret;
}
int main()
{
T=read();
while(T--)
{
n=read();
for(int i=1;i<=n;i++) a[i]=read();
sta=end=&f[1];
for(int i=1;i<=n;i++)
{
if(a[i]!=a[i-1])
{
ans[i]=a[i];
for(int j=a[i-1]+1;j<a[i];j++)
{
f[j].k=j;
f[j].last=end;
(*end).next=&f[j];
end=&f[j];
}
}
else{ans[i]=(*sta).k;sta=(*sta).next;}
}
for(int i=1;i<n;i++) printf("%d%s",ans[i]," ");
printf("%d\n",ans[n]);
sta=end=&f[1];
for(int i=1;i<=n;i++)
{
if(a[i]!=a[i-1])
{
ans[i]=a[i];
for(int j=a[i-1]+1;j<a[i];j++)
{
f[j].k=j;
f[j].last=end;
(*end).next=&f[j];
end=&f[j];
}
}
else{ans[i]=(*end).k;end=(*end).last;}
}
for(int i=1;i<n;i++) printf("%d%s",ans[i]," ");
printf("%d\n",ans[n]);
}
return 0;
}