func_code_string: #include <bits/stdc++.h>   using namespace std;   template <class T>   bool ckmin(T& a, const T& b) {     return b < a ? a = b, 1 : 0;   }   template <class T>   bool ckmax(T& a, const T& b) {     return a < b ? a = b, 1 : 0;   }   const long long MOD = (long long)(1e9) + 7;   long long getVal(pair<pair<int, int>, long long> p) {     return (p.second * (p.first.second - p.first.first + 1)) % MOD;   }   void pr(stack<pair<pair<int, int>, long long>> st) {     cout << st.top().first.first <<     << st.top().first.second <<              << st.top().second <<   n ;     st.pop();     if (!st.empty()) pr(st);   }   int main() {     ios::sync_with_stdio(0);     cin.tie(0);     string second;     cin >> second;     vector<int> v;     int cur = 0;     for (int i = 0; i < (int)second.size(); i++) {       if (second[i] ==  1 ) {         v.push_back(cur);         cur = 0;       } else {         cur++;       }     }     if ((int)v.size() == 0) {       return cout << (int)second.size() <<   n , 0;       ;     }     long long factor = ((long long)(v[0] + 1) * (cur + 1)) % MOD;     v.erase(v.begin());     stack<pair<pair<int, int>, long long>> st;     long long cursum = 0;     for (int i = 0; i < (int)v.size(); i++) {       long long ori = cursum;       while (!st.empty()) {         if (v[i] >= st.top().first.first) {           cursum -= getVal(st.top());           cursum %= MOD;           cursum += MOD;           cursum %= MOD;           if (v[i] < st.top().first.second) {             st.top().first.first = v[i] + 1;             cursum += getVal(st.top());             cursum %= MOD;             break;           } else {             st.pop();           }         } else {           break;         }       }       st.push(make_pair(make_pair(0, v[i]), (ori + 1) % MOD));       cursum += getVal(st.top());       cursum %= MOD;     }     cursum++;     cursum %= MOD;     long long res = (factor * cursum) % MOD;     return cout << res <<   n , 0;     ;   }   