#include<bits/stdc++.h>
#define cs const
#define pb push_back
using namespace std;
cs int Mod = 1e9 + 7;
int add(int a, int b){ return a + b >= Mod ? a + b - Mod : a + b; }
int dec(int a, int b){ return a - b < 0 ? a - b + Mod : a - b; }
int mul(int a, int b){ return 1ll * a * b % Mod; }
void Add(int &a, int b){ a = add(a,b); }
void Mul(int &a, int b){ a = mul(a,b); }
void Dec(int &a, int b){ a = dec(a,b); }
int ksm(int a, int b){ int as=1; for(;b;b>>=1,Mul(a,a)) if(b&1) Mul(as,a); return as; }
cs int N = 1e5 + 50;
int n; char S[N];
int dp[N], trs[N][2];
int main(){
	#ifdef FSYolanda
	freopen("1.in","r",stdin);
	#endif
	scanf("%s",S+1); n=strlen(S+1); bool ok=true;
	for(int i=1; i<n; i++) if(S[i]==S[i+1]) ok=false;
	if(ok) return puts("1"),0; int k=0; dp[n+1]=1;
	trs[n+1][0]=trs[n+1][1]=trs[n+2][0]=trs[n+2][1]=1;
	for(int i=n,c; i>=1; i--){
		c=S[i]-'a'+1; k=(k+c)%3;
		trs[i][0]=S[i]=='a'?i+1:(S[i+1]=='b'?i+2:trs[i+2][0]);
		trs[i][1]=S[i]=='b'?i+1:(S[i+1]=='a'?i+2:trs[i+2][1]);
		dp[i]=add(dp[trs[i][0]],dp[trs[i][1]])+(k==0);
	} cout<<dec(dp[1],k==0); return 0;
}