fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. #define ll long long
  4. int main() {
  5. ll t;
  6. cin>>t;
  7. while(t--){
  8. int n,m;
  9. string s,ss;
  10. cin>>n>>m;
  11. cin>>s;
  12.  
  13. int z=n,o=m,que=0;
  14.  
  15. for(int i=0;i<s.size();i++) {
  16. if(s[i]=='0')n--;
  17. else if(s[i]=='1')m--;
  18. else que++;
  19. }
  20.  
  21. int sz=s.size();
  22. for(int i=0;i<sz;i++){
  23. if(i==s[sz-i-1])continue;
  24. else if(s[i]=='?'&&s[sz-i-1]=='0'&&n>0)n--,s[i]='0';
  25. else if(s[i]=='?'&&s[sz-i-1]=='1'&&m>0)m--,s[i]='1';
  26. }
  27.  
  28. for(int i=0;i<sz;i++){
  29. if(i==s[sz-i-1])continue;
  30. else if(s[i]=='?'&&s[sz-i-1]=='?'&&n>1)n-=2,s[sz-i-1]='0',s[i]='0';
  31. else if(s[i]=='?'&&s[sz-i-1]=='?'&&m>1)m-=2,s[sz-i-1]='1',s[i]='1';
  32. }
  33.  
  34. if(s[sz/2]=='?'){if(n>0)s[sz/2]='0';else if(m>0)s[sz/2]='1';}
  35. int coun[2]={0};
  36.  
  37. for(int i=sz-1;i>=0;i--){
  38. ss+=s[i];
  39. if(s[i]!='?')
  40. coun[s[i]-48]++;
  41. }
  42. if(s==ss&&coun[0]==z&&coun[1]==o)cout<<s<<endl;
  43. else cout<<-1<<endl;
  44. }
  45. return 0;
  46. }
Success #stdin #stdout 0s 5424KB
stdin
1
1 1
??
stdout
-1