This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include <bits/stdc++.h>
using namespace std;
#define fio() ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL)
int n,m,b[200005],a[200005],k,flag,t,mpp[50],bir,iki,uc,cev;
char c;
string s,ss,yaz;
int main(void){
fio();
cin>>n>>s;
if(n%2==0){cout<<"NOT POSSIBLE\n";return 0;}
for(int i=0;i<n;i++){
mpp[s[i]-'A']++;
}
for(int i=0;i<=25;i++){
if(mpp[i]%2){
cev++;
c=i+'A';
}
}
//~ cout<<cev<<endl;
if(cev!=1){cout<<"NOT POSSIBLE\n";return 0;}
cev=0;
int bas=0;
int son=n/2+1;
flag=0;
if(s[n/2]!=c)flag=1;
while(son<n){
if(s[bas]!=s[son])flag=1;
bas++;
son++;
}
if(flag==0){
cev++;
bir=1;
}
bas=0;
son=n/2;
flag=0;
while(son<n){
if(s[bas]!=s[son] && s[son]!=c){flag=2;break;}
if(flag==1 && s[bas]!=s[son]){flag=2;break;}
if(s[bas]!=s[son]){
if(son==n/2){flag=2;break;}
flag=1;
son++;
}
else{
bas++;
son++;
}
}
if(flag<=1){
cev++;
iki=1;
}
flag=0;
bas=n/2;
son=n-1;
//~ cout<<c<<endl;
while(bas>=0){
//~ cout<<s[bas]<<" : : "<<s[son]<<endl;
if(s[bas]!=s[son] && s[bas]!=c){flag=2;break;}
if(flag==1 && s[bas]!=s[son]){flag=2;break;}
if(s[bas]!=s[son]){
if(bas==n/2){flag=2;break;}
flag=1;
bas--;
}
else{
bas--;
son--;
}
}
//~ cout<<cev<<endl;
if(flag<=1){
cev++;
uc=1;
}
if(cev==0){cout<<"NOT POSSIBLE\n";return 0;}
if(cev>1){cout<<"NOT UNIQUE\n";return 0;}
cev=0;
for(int i=0;i<n;i++){
string s1{};
string s2{};
if(s[i]!=c)continue;
for(int j=0;j<n;j++){
if(i==j)continue;
if((int)s1.size()<n/2)s1+=s[j];
else s2+=s[j];
}
if(s1==s2){
cev++;
yaz=s1;
}
}
if(cev>2){cout<<"NOT UNIQUE\n";return 0;}
if(cev==0){cout<<"NOT POSSIBLE\n";return 0;}
cout<<yaz<<endl;
return 0;
if(bir==1){
//~ cout<<"NOT UNIQUE\n";return 0;
bas=0;
son=n/2+1;
while(son<n){
cout<<s[son];
son++;
}
return 0;
}
if(iki==1){
bas=0;
son=n/2;
flag=0;
while(son<n){
if(s[bas]!=s[son] && s[son]!=c){flag=2;break;}
if(flag==1 && s[bas]!=s[son]){flag=2;break;}
if(s[bas]!=s[son]){
if(son==n/2){flag=2;break;}
flag=1;
son++;
}
else{
cout<<s[bas]<<endl;
bas++;
son++;
}
}
return 0;
}
flag=0;
bas=n/2;
son=n-1;
//~ cout<<c<<endl;
while(bas>=0){
//~ cout<<s[bas]<<" : : "<<s[son]<<endl;
if(s[bas]!=s[son] && s[bas]!=c){flag=2;break;}
if(flag==1 && s[bas]!=s[son]){flag=2;break;}
if(s[bas]!=s[son]){
if(bas==n/2){flag=2;break;}
flag=1;
bas--;
}
else{
ss+=s[bas];
bas--;
son--;
}
}
reverse(ss.begin(),ss.end());cout<<ss;
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |