#include<bits/stdc++.h>
#define mp make_pair
#define pb push_back
#define fi first
#define se second
#define sz(a) int(a.size())
#define clr(a) memset(a,0,sizeof(a))
#define all(a) a.begin(),a.end()
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef long double ld;
typedef pair<int,int> pii;
typedef pair<ll,int> pli;
const int inf=1e9;
const ll Inf=1e18;
const int N=1e5+10;
const int mod=1e9+7;
int gi() {
    int x=0,o=1;char ch=getchar();
    while((ch<'0'||ch>'9')&&ch!='-') ch=getchar();
    if(ch=='-') o=-1,ch=getchar();
    while(ch>='0'&&ch<='9') x=x*10+ch-'0',ch=getchar();
    return x*o;
}
template<typename T> bool chkmax(T &a,T b) { return a<b?a=b,1:0; };
template<typename T> bool chkmin(T &a,T b) { return a>b?a=b,1:0; };
int add(int a,int b) { return a+b>=mod?a+b-mod:a+b; }
int sub(int a,int b) { return a-b<0?a-b+mod:a-b; }
void inc(int &a,int b) { a=(a+b>=mod?a+b-mod:a+b); }
void dec(int &a,int b) { a=(a-b<0?a-b+mod:a-b); }
char s[N];
int n,f[N],sum[N],nxt[N][3],ans=0;
int main() {
    scanf("%s",s+1),n=strlen(s+1);
    int fl=1;
    for(int i=2;i<=n;i++) fl&=(s[i]!=s[i-1]);
    if(fl) return puts("1"),0;
    for(int i=1;i<=n;i++) sum[i]=(sum[i-1]+(s[i]=='a')+1)%3;
    for(int i=0;i<3;i++) nxt[n+1][i]=n+1;
    for(int i=n;i;i--) {
        for(int j=0;j<3;j++) nxt[i][j]=nxt[i+1][j];
        nxt[i][sum[i]]=i;
    }
    f[0]=1;
    for(int i=0;i<=n;i++) {
        for(int j=1;j<3;j++)
            if(nxt[i+1][(sum[i]+j)%3]<=n) inc(f[nxt[i+1][(sum[i]+j)%3]],f[i]);
        if(i&&sum[i]==sum[n]) inc(ans,f[i]);
    }
    printf("%d\n",ans);
    return 0;
}
