#include <bits/stdc++.h>
using namespace std;
template <class T>
inline void read(T &x) {
  int f = 0;
  x = 0;
  char ch = getchar();
  for (; !isdigit(ch); ch = getchar()) f |= (ch == '-');
  for (; isdigit(ch); ch = getchar()) x = x * 10 + ch - '0';
  if (f) x = -x;
}
const int N = 100005, mod = 1e9 + 7;
int f[N], s[N], nxt[N], las[N][3], sum[N][3];
int n, flag, ans = 1;
char st[N];
void add(int &x, int y) { x = (x + y >= mod ? x + y - mod : x + y); }
int main() {
  scanf("%s", st + 1);
  n = strlen(st + 1);
  for (int i = (1); i <= (n); i++) {
    s[i] = (s[i - 1] + 1 + (st[i] == 'b')) % 3;
  }
  for (int i = (n); i >= (1); i--) {
    if (st[i] == st[i + 1])
      nxt[i] = i + 1;
    else
      nxt[i] = nxt[i + 1];
    for (int t = (0); t < (3); t++) las[i][t] = las[i + 1][t];
    las[i][s[i]] = i;
  }
  f[0] = 1;
  for (int i = (1); i <= (n); i++) {
    add(f[i], f[i - 1]);
    int p = nxt[i];
    if (p) {
      add(sum[p][s[i - 1]], f[i - 1]);
      p = las[p][(2 * s[i - 1] + 3 - s[i]) % 3];
      add(f[p], f[i - 1]);
    }
    for (int t = (0); t < (3); t++) {
      add(sum[i][t], sum[i - 1][t]);
      int tmp = (s[i] - t + 3) % 3;
      if (tmp && tmp != (s[i] - s[i - 1] + 3) % 3) {
        add(ans, sum[i][t]);
      }
    }
    if (!flag && st[i] == st[i - 1]) flag = 1, ans += (i - 1) / 2;
    if (!s[i - 1] && flag) ans++;
  }
  cout << ans << endl;
  return 0;
}
