#include <bits/stdc++.h>
using namespace std;
long long n, m, k, x[111], sz, a[111], b[111], l, r, w[111], p[111] = {1}, ans;
long long gcd(long long a, long long b) {
  if (!b) return a;
  return gcd(b, a % b);
}
string s;
void dfs(long long x) {
  w[x] = 1;
  for (long long i = 1; i <= sz; i++)
    if (w[i] == 0 && ((a[i] < a[x] && a[x] < b[i])) ||
        (a[i] < b[x] && b[x] < b[i]))
      dfs(i);
}
int main() {
  cin >> s;
  n = s.size();
  for (long long i = 1; i <= n; i++) p[i] = p[i - 1] * 2, p[i] %= 1000000007;
  for (long long i = 1; i <= n; i++) {
    if (s[i - 1] == '1')
      ans += ((p[n - i] * p[n - i]) % 1000000007) * (i > 1 ? p[i - 1] : 1);
    ans %= 1000000007;
  }
  cout << ans;
}
