如果当前sa的下一位的rank大于下个sa的下一位的rank,那么下一位sa的字母应该比当前大,否则相同。
// 来自某位神犇
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<queue>
#include<vector>
#include<set>
#include<map>
#include<iostream>
#include<algorithm>
#define R 998244353
using namespace std;
int sc()
{
int i=0; char c=getchar();
while(c>'9'||c<'0')c=getchar();
while(c>='0'&&c<='9')i=i*10+c-'0',c=getchar();
return i;
}
char s[500005],a;
int sa[500005],rank[500005];
int n;
int main()
{
n=sc();
for(int i=1;i<=n;i++)
{
sa[i]=sc();
rank[sa[i]]=i;
}
s[sa[1]]=a='a';
for(int i=2;i<=n;i++)
{
if(rank[sa[i-1]+1]>rank[sa[i]+1]) a++;
if(a>'z')
{
puts("-1");
return 0;
}
s[sa[i]]=a;
}
puts(s+1);
return 0;
}