可过21个点qwq
#include<bits/stdc++.h>
using namespace std;
#define int long long
string a;
int n,sum=0;
int len,t[66],ans[66];
signed main(){
cin>>a;
cin>>n;
int h=n;
while(n){
if(n%2==0){
t[++len]=0;
n/=2;
}else if(n!=1){
t[++len]=1;
n/=2;
}else{
t[++len]=1;
break;
}
}
reverse(t+1,t+len+1);
int flag=0;
for(int i=0;i<a.size();i++){
if(a[i]=='1'){
flag=a.size()-i;
break;
}
}
if(flag>len){
cout<<-1;
return 0;
}
if(a.size()>len){
int fl=0;
int base=a.size()-len-1;
for(int i=1;i<=len;i++){
//cout<<a[i+base]<<' '<<t[i]<<'\n';
if(a[i+base]=='?'){
if(t[i]==1){
ans[i]=1;
}else{
ans[i]=0;
fl=i;
break;
}
}else{
if(a[i+base]=='1'&&t[i]==0){
cout<<-1;
return 0;
}
if(a[i+base]=='0'&&t[i]==1){
fl=i;
break;
}
ans[i]=t[i];
}
}
if(fl){
for(int i=fl+1;i<=len;i++){
if(a[i+base]=='?')
ans[i]=1;
else{
ans[i]=a[i+base]-'0';
}
}
}
for(int i=1;i<=len;i++){
//cout<<ans[i]<<' ';
if(ans[i])
sum+=pow(2,len-i);
}
}else if(a.size()<len){
int base=len-a.size();
for(int i=0;i<a.size();i++){
if(a[i]=='?'){
ans[i+1]=1;
}else{
ans[i+1]=a[i]-'0';
}
}
for(int i=1;i<=a.size();i++){
if(ans[i])
sum+=pow(2,a.size()-i);
}
}else{
int head=1,flg=0;
sum=-1;
while(head<=len){
sum=0;
for(int i=1;i<=len;i++){
if(a[i-1]=='?'&&i>=head){
ans[i]=1;
}else if(a[i-1]=='?'&&i<head){
ans[i]=0;
}else{
ans[i]=a[i-1]-'0';
}
}
for(int i=1;i<=len;i++){
//cout<<ans[i]<<' ';
if(ans[i])
sum+=pow(2,len-i);
}
if(sum<=h&&sum!=-1){
flg=1;
break;
}
head++;
//cout<<sum<<' ';
}
if(!flg){
cout<<-1;
return 0;
}
}
cout<<sum;
return 0;
}