#include <bits/stdc++.h>
using namespace std;
const int mod = 1000000007;
void modadd(int &a, int b) {
  a += b;
  if (a >= mod) {
    a -= mod;
  }
}
int dp[2][2][2];
char buff[128];
int main() {
  cin.sync_with_stdio(false);
  scanf("%s", buff);
  int n = strlen(buff);
  dp[n & 1][1][1] = 1;
  for (int i = n - 1; i >= 0; --i) {
    int cur = i & 1;
    int next = 1 - cur;
    for (int iltj = 0; iltj < 2; ++iltj) {
      for (int agtb = 0; agtb < 2; ++agtb) {
        dp[cur][iltj][agtb] = 0;
        for (int id = 0; id < 2; ++id) {
          int ad = id ^ (buff[i] - '0');
          for (int jd = 0; jd < 2; ++jd) {
            if (!iltj && id > jd) continue;
            int bd = jd ^ (buff[i] - '0');
            if (!agtb && ad < bd) continue;
            int niltj = iltj || (id < jd);
            int nagtb = agtb || (ad > bd);
            modadd(dp[cur][iltj][agtb], dp[next][niltj][nagtb]);
          }
        }
      }
    }
  }
  printf("%d\n", dp[0][0][0]);
  return 0;
}
