#include <bits/stdc++.h>
using namespace std;
const long long MOD = 1e9 + 7;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
string s;
cin >> s;
// digit dp: less = already < L, tight = still == L
long long less = 0, tight = 1;
for (char c : s) {
int bit = c - '0';
if (bit == 0) {
// must choose (0,0) to stay tight, else goes invalid
less = (less * 3) % MOD; // (0,0), (0,1), (1,0)
} else {
// bit == 1
long long new_less = (less * 3 + tight) % MOD; // tight picks (0,0) -> less
long long new_tight = (tight * 2) % MOD; // (0,1) or (1,0)
less = new_less;
tight = new_tight;
}
}
cout << (less + tight) % MOD << "\n";
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgpjb25zdCBsb25nIGxvbmcgTU9EID0gMWU5ICsgNzsKCmludCBtYWluKCkgewogICAgaW9zOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOwogICAgY2luLnRpZShudWxscHRyKTsKICAgIAogICAgc3RyaW5nIHM7CiAgICBjaW4gPj4gczsKICAgIAogICAgLy8gZGlnaXQgZHA6IGxlc3MgPSBhbHJlYWR5IDwgTCwgdGlnaHQgPSBzdGlsbCA9PSBMCiAgICBsb25nIGxvbmcgbGVzcyA9IDAsIHRpZ2h0ID0gMTsKICAgIAogICAgZm9yIChjaGFyIGMgOiBzKSB7CiAgICAgICAgaW50IGJpdCA9IGMgLSAnMCc7CiAgICAgICAgCiAgICAgICAgaWYgKGJpdCA9PSAwKSB7CiAgICAgICAgICAgIC8vIG11c3QgY2hvb3NlICgwLDApIHRvIHN0YXkgdGlnaHQsIGVsc2UgZ29lcyBpbnZhbGlkCiAgICAgICAgICAgIGxlc3MgPSAobGVzcyAqIDMpICUgTU9EOyAvLyAoMCwwKSwgKDAsMSksICgxLDApCiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgLy8gYml0ID09IDEKICAgICAgICAgICAgbG9uZyBsb25nIG5ld19sZXNzID0gKGxlc3MgKiAzICsgdGlnaHQpICUgTU9EOyAvLyB0aWdodCBwaWNrcyAoMCwwKSAtPiBsZXNzCiAgICAgICAgICAgIGxvbmcgbG9uZyBuZXdfdGlnaHQgPSAodGlnaHQgKiAyKSAlIE1PRDsgICAgICAgLy8gKDAsMSkgb3IgKDEsMCkKICAgICAgICAgICAgbGVzcyA9IG5ld19sZXNzOwogICAgICAgICAgICB0aWdodCA9IG5ld190aWdodDsKICAgICAgICB9CiAgICB9CiAgICAKICAgIGNvdXQgPDwgKGxlc3MgKyB0aWdodCkgJSBNT0QgPDwgIlxuIjsKICAgIHJldHVybiAwOwp9