#include <bits/stdc++.h>
#define For(i,x,y) for(int i=(x);i<=(y);++i)
#define Rof(i,x,y) for(int i=(x);i>=(y);--i)
#define FoR(i,x,y,z) for(int i=(x);i<=(y);i+=(z))
#define RoF(i,x,y,z) for(int i=(x);i>=(y);i-=(z))
#define Edge(x) for(int i=head[x],to=e[i].v;i;i=e[i].nxt,to=e[i].v)
typedef long long ll;
const int N=100005;
const int mod=1e9+7;
using namespace std;
char s[N];
int pre[N],f[N],pos[3],hve[N];
void add(int &x,int y){ x+y>=mod?x=x+y-mod:x=x+y; }
int main(){
	scanf("%s",s+1); int n=strlen(s+1);
	For(i,1,n){
		pre[i]=(pre[i-1]+s[i]-'a'+1)%3;
		if(i!=n) hve[i]=(s[i]==s[i+1]);
	}
	For(i,1,n) hve[i]+=hve[i-1];
	if(!hve[n]) return puts("1"),0;
	f[0]=1;pos[0]=0,pos[1]=pos[2]=-1;
	For(i,1,n){
		if(!pre[i] && i!=n) add(f[i],1);
		add(f[i],f[i-1]);
		int fr=pos[(pre[i]+s[i]-'a'+1)%3];
		if(~fr && hve[i]-hve[fr]) add(f[i],f[fr]);
		pos[pre[i]]=i;		
	}
	printf("%d\n",f[n]);
}
