#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int mod=1000000007;
inline void add(int &x,int y){(x+=y)>=mod?x-=mod:0;}
char s[100010];
int n,f[100010],sum[100010],last[3],nxt[100010][3],tmp[3],ans;
int main()
{
	scanf("%s",s+1);
	n=strlen(s+1);
	bool flag=0;
	for(int i=1;i<n;++i)flag|=s[i]==s[i+1];
	if(!flag)return printf("1"),0;
	for(int i=1;i<=n;++i)sum[i]=sum[i-1]+(s[i]=='a'?1:2);
	last[0]=last[1]=last[2]=n+1;
	for(int i=n;i;--i)
	{
		for(int j=0;j<=2;++j)tmp[(s[i]-'a'+1+j)%3]=last[j];
		for(int j=0;j<=2;++j)last[j]=tmp[j];
		last[s[i]-'a'+1]=i;
		for(int j=0;j<=2;++j)nxt[i][j]=last[j];
	}
/*	for(int i=1;i<=n;++i)
	{
		for(int j=0;j<=2;++j)printf("%d ",nxt[i][j]);
		printf("\n");
	}*/
	f[0]=1;
	for(int i=0,r=0;i<n;++i)
	{
		if(r<i+2)
		{
			r=i+2;
			while(r<=n&&s[r]!=s[r-1])++r;
		}
	//	printf("%d %d %d %d\n",i,r,nxt[r][((1+sum[i]-sum[r-1])%3+3)%3],nxt[r][((2+sum[i]-sum[r-1])%3+3)%3]);
		if(s[i+1]=='a')add(f[i+1],f[i]);
		else if(r<=n)add(f[nxt[r][((1+sum[i]-sum[r-1])%3+3)%3]],f[i]);
		if(s[i+1]=='b')add(f[i+1],f[i]);
		else if(r<=n)add(f[nxt[r][((2+sum[i]-sum[r-1])%3+3)%3]],f[i]);
	}
	for(int i=1;i<=n;++i)if((sum[n]-sum[i])%3==0)add(ans,f[i]);
	printf("%d",ans);
	return 0;
}
