//
// main.cpp
// Richard
//
// Created by 邵金杰 on 16/9/16.
// Copyright © 2016年 邵金杰. All rights reserved.
//
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<set>
using namespace std;
const int maxn=60000+100;
char s[maxn];
int dp[maxn],vis[30];
int main()
{
while(scanf("%s",s+1)!=EOF)
{
memset(vis,0,sizeof(vis));
memset(dp,0,sizeof(dp));
int pos=0;
int len=(int)strlen(s+1);
if(len<26) {printf("-1\n");continue;}
for(int i=1;i<=len;i++)
{
if(s[i]=='?') {dp[i]=dp[i-1]+1;}
else{
int idx=s[i]-'A';
if(vis[idx]==0) {vis[idx]=1;dp[i]=dp[i-1]+1;}
else {
memset(vis,0,sizeof(vis));
vis[idx]=1;
int p=0;
for(int j=i-1;;j--)
{
if(s[j]==s[i]){
dp[i]=i-j;
p=j;
break;
}
vis[s[j]-'A']=1;
}
for(int j=i-1;;j--){
if(j==p) break;
dp[j]=dp[j+1]-1;
}
}
}
if(dp[i]==26) {pos=i;break;}
}
if(pos!=0){
for(int i=pos;i>=pos-26+1;i--)
{
if(s[i]=='?')
{
for(int j=25;j>=0;j--)
{
if(vis[j]==0) {vis[j]=1;s[i]=j+'A';break;}
}
}
}
for(int i=1;i<=len;i++)
{
if(s[i]=='?') s[i]='A';
}
printf("%s\n",s+1);
}
else printf("-1\n");
}
return 0;
}
Coderforces 716B Complete the Word
最新推荐文章于 2021-05-30 18:01:31 发布