#include<bits/stdc++.h>
using namespace std;
template<typename T>inline T read(){
	T f=0,x=0;char c=getchar();
	while(!isdigit(c)) f=c=='-',c=getchar();
	while(isdigit(c)) x=x*10+c-48,c=getchar();
	return f?-x:x;
}
namespace run{
	const int N=1e5+9,mod=1e9+7;
	inline int add(int x,int y){return x+y>=mod?x-mod+y:x+y;}
	inline int sub(int x,int y){return x>=y?x-y:x+mod-y;}
	int f[N],n,nxt[N][3],sum[N],ans;char s[N];
	int main(){
		scanf("%s",s+1),n=strlen(s+1);
		int peg=0;
		for(int i=1;i<n;i++) if(s[i]==s[i+1]){peg=1;break;}
		if(!peg) puts("1"),exit(0);
		for(int i=1;i<=n;i++) sum[i]=(sum[i-1]+(s[i]=='a'?1:2))%3;
		for(int j=0;j<3;j++) nxt[n][j]=n+1;
		for(int i=n-1;i>=0;i--){
			for(int j=0;j<3;j++) nxt[i][j]=nxt[i+1][j];
			nxt[i][sum[i+1]]=i+1;
		}
		f[0]=1;
		for(int i=0;i<n;i++){
			for(int j=1;j<3;j++) f[nxt[i][(sum[i]+j)%3]]=add(f[i],f[nxt[i][(sum[i]+j)%3]]);
			if(i && sum[n]==sum[i]) ans=add(ans,f[i]); 
		}
	//	for(int i=1;i<=n;i++) cout<<f[i]<<" ";cout<<endl;
		printf("%d\n",add(ans,f[n]));
		return 0;
	}
}
int main(){
#ifdef my
	freopen(".in","r",stdin);
	freopen(".out","w",stdout);
#endif
	return run::main();
}