def solution(S):
Trigger1 = True;
while(Trigger1 == True):
count = 0;
givens = S
if(len(givens)>1 and len(givens)<1001):
for x in givens:
if(ord(x)==63 or (122>=ord(x) and ord(x)>=97)):
count+=1;
if(count==len(givens)):
Trigger1 = False;
else:
print("1-1000자리 문자열/a-z혹은?로 이루어진 문자열을 입력해주세요.");
n = int(len(givens)/2)
i = 0;
count2 = 0;
count3 = 0;
while(n>i):
if(givens[i]=='?' or givens[-i-1]=='?'):
count2+=1;
if(givens[i]=='?' and givens[-i-1]!='?'):
table = str.maketrans('?', givens[-i-1]);
givens = givens.translate(table)
elif(givens[i]!='?' and givens[-i-1]=='?'):
table = str.maketrans('?', givens[i]);
givens = givens.translate(table)
else:
table = str.maketrans('?', 'a');
givens = givens.translate(table)
elif(givens[i]==givens[-i-1]):
count2+=1;
i+=1;
if(count2==n):
print(givens);
return givens;
else:
print("NO");
return "NO";
solution("?ab??a");
solution("abab?");
solution("?a?c?a?");
solution("?abbc?a?");
solution("?a?c?a?");
CmRlZiBzb2x1dGlvbihTKToKICAgIFRyaWdnZXIxID0gVHJ1ZTsKICAgIHdoaWxlKFRyaWdnZXIxID09IFRydWUpOgogICAgICAgIGNvdW50ID0gMDsKICAgICAgICBnaXZlbnMgPSBTCiAgICAgICAgaWYobGVuKGdpdmVucyk+MSBhbmQgbGVuKGdpdmVucyk8MTAwMSk6CiAgICAgICAgICAgIGZvciB4IGluIGdpdmVuczoKICAgICAgICAgICAgICAgIGlmKG9yZCh4KT09NjMgb3IgKDEyMj49b3JkKHgpIGFuZCBvcmQoeCk+PTk3KSk6CiAgICAgICAgICAgICAgICAgICAgY291bnQrPTE7CiAgICAgICAgaWYoY291bnQ9PWxlbihnaXZlbnMpKToKICAgICAgICAgICAgVHJpZ2dlcjEgPSBGYWxzZTsKICAgICAgICBlbHNlOgogICAgICAgICAgICBwcmludCgiMS0xMDAw7J6Q66asIOusuOyekOyXtC9hLXrtmLnsnYA/66GcIOydtOujqOyWtOynhCDrrLjsnpDsl7TsnYQg7J6F66Cl7ZW07KO87IS47JqULiIpOwogICAgbiA9IGludChsZW4oZ2l2ZW5zKS8yKQogICAgaSA9IDA7CiAgICBjb3VudDIgPSAwOwogICAgY291bnQzID0gMDsKICAgIHdoaWxlKG4+aSk6CiAgICAgICAgaWYoZ2l2ZW5zW2ldPT0nPycgb3IgZ2l2ZW5zWy1pLTFdPT0nPycpOgogICAgICAgICAgICBjb3VudDIrPTE7CiAgICAgICAgICAgIAogICAgICAgICAgICBpZihnaXZlbnNbaV09PSc/JyBhbmQgZ2l2ZW5zWy1pLTFdIT0nPycpOgogICAgICAgICAgICAgICAgdGFibGUgPSBzdHIubWFrZXRyYW5zKCc/JywgZ2l2ZW5zWy1pLTFdKTsKICAgICAgICAgICAgICAgIGdpdmVucyA9IGdpdmVucy50cmFuc2xhdGUodGFibGUpCiAgICAgICAgICAgIGVsaWYoZ2l2ZW5zW2ldIT0nPycgYW5kIGdpdmVuc1staS0xXT09Jz8nKToKICAgICAgICAgICAgICAgIHRhYmxlID0gc3RyLm1ha2V0cmFucygnPycsIGdpdmVuc1tpXSk7CiAgICAgICAgICAgICAgICBnaXZlbnMgPSBnaXZlbnMudHJhbnNsYXRlKHRhYmxlKQogICAgICAgICAgICBlbHNlOgogICAgICAgICAgICAgICAgdGFibGUgPSBzdHIubWFrZXRyYW5zKCc/JywgJ2EnKTsKICAgICAgICAgICAgICAgIGdpdmVucyA9IGdpdmVucy50cmFuc2xhdGUodGFibGUpCiAgICAgICAgZWxpZihnaXZlbnNbaV09PWdpdmVuc1staS0xXSk6CiAgICAgICAgICAgIGNvdW50Mis9MTsKICAgICAgICBpKz0xOwogICAgaWYoY291bnQyPT1uKToKICAgICAgICBwcmludChnaXZlbnMpOwogICAgICAgIHJldHVybiBnaXZlbnM7CiAgICBlbHNlOgogICAgICAgIHByaW50KCJOTyIpOwogICAgICAgIHJldHVybiAiTk8iOwpzb2x1dGlvbigiP2FiPz9hIik7CnNvbHV0aW9uKCJhYmFiPyIpOwpzb2x1dGlvbigiP2E/Yz9hPyIpOwpzb2x1dGlvbigiP2FiYmM/YT8iKTsKc29sdXRpb24oIj9hP2M/YT8iKTs=