#include <cstdio>

const int N = 1e5 + 10;
const int MOD = 1e9 + 7;

char s[N];
int a[N], n, f[N], nxt[3];

int main() {
    scanf("%s", s);
    for (; s[n]; ++n) a[n+1] = (a[n] + s[n] - 'a' + 1) % 3; // 求前缀和 
    // 判断是否可以操作 
    int flag = 0;  
    for (int i = 1; i < n; ++i) {
        if (s[i] == s[i-1]) flag = 1;
    }
    if (!flag) {
        puts("1");
        return 0;
    }
    // 递推 
    f[n] = 1;
    for (int i = 0; i < 3; ++i) nxt[i] = i == a[n] ? n : n + 1;
    for (int i = n-1; i; --i) {
        f[i] = a[i] == a[n]; // 后面可不可以不分段 
        for (int c = 1; c <= 2; ++c) {
            (f[i] += f[nxt[(a[i]+c)%3]]) %= MOD; // 后面加一段A或B 
        }
        nxt[a[i]] = i; // 记录该p值最后一次出现的位置 
    }
    printf("%d\n", (f[nxt[1]] + f[nxt[2]]) % MOD);
    return 0;
}