#include <bits/stdc++.h>
using namespace std;
const long long maxn = 1e6 + 5;
const long long MOD = 1e9 + 7;
bool comparator(long long i, long long j) { return (i < j); }
long long power(long long x, long long i) {
  long long ans = 1;
  while (i > 0) {
    if (i & 1) ans = (ans * x) % MOD;
    i >>= 1;
    x = (x * x) % MOD;
  }
  return ans;
}
long long power(long long x, long long i, long long mod) {
  long long ans = 1;
  while (i > 0) {
    if (i & 1) ans = (ans * x) % mod;
    i >>= 1;
    x = (x * x) % mod;
  }
  return ans;
}
long long modInverse(long long x, long long mod) {
  return power(x, mod - 2, mod);
}
bool isPalindrome(string s) {
  long long limit = s.length() / 2;
  for (long long i = 0; i < limit; i++) {
    if (s[i] != s[s.length() - i - 1]) return 0;
  }
  return true;
}
long long gcd(long long x, long long y) {
  long long t;
  while (y != 0) {
    t = x % y;
    x = y;
    y = t;
  }
  return x;
}
bool isPrime(long long n) {
  long long root = sqrt(n);
  for (long long i = 2; i <= root; i++)
    if (n % i == 0) return 0;
  return 1;
}
long long val[maxn];
void init() {
  val[0] = 1;
  for (long long i = 1; i < maxn; i++) val[i] = (val[i - 1] << 1) % MOD;
}
string s;
signed main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  init();
  cin >> s;
  long long ans, a, b;
  a = b = 0;
  ans = 0;
  for (long long i = 0; i < s.length(); i++) {
    if (s[i] == 'b')
      ans = (ans + (val[a] - 1) + MOD) % MOD;
    else
      a++;
  }
  cout << ans << "\n";
  return 0;
}
