#include <iostream>
#include <string>

using namespace std;

long long f[300030][3][3],ans,mod=1000000007;

string s;

int main()
{
  f[0][0][0]=1;
  cin>>s;
  s="0"+s;
  for(int i=0;i<(int)s.size()-1;i++)
  {
    for(int x=0;x<=2;x++)
    {
      for(int y=0;y<=2;y++)
      {
        if(s[i+1]!='0')
        {
          if(y) f[i+1][x][y-1]+=f[i][x][y];
          else f[i+1][min(x+1,2)][y]+=f[i][x][y];
          f[i+1][x][y-1]%=mod;
          f[i+1][min(x+1,2)][y]%=mod;
        }
        if(s[i+1]!='1')
        {
          if(y==2) f[i+1][x][1]+=f[i][x][y];
          else f[i+1][x][y+1]+=f[i][x][y];
          f[i+1][x][1]%=mod;
          f[i+1][x][y+1]%=mod;
        }
      }
    }
  }
  for(int i=0;i<3;i++)
  {
    for(int j=0;j<=i;j++)
    {
      ans+=f[s.size()-1][i][j];
      ans%=mod;
    }
  }
  printf("%lld\n",ans);
}
