#include<bits/stdc++.h>
#define rep(i,a,b) for(int i=(a);i<=(b);i++)
#define per(i,a,b) for(int i=(a);i>=(b);i--)
#define REP(i,n) for(int i=(0);i<(n);i++)
#define fi first
#define se second
#define pb push_back
#define mp make_pair
using namespace std;
typedef pair<int,int> pii;
typedef vector<int> vi;
typedef long long ll;
 
template<class T> inline void read(T &x){
	int f=0;x=0;char ch=getchar();
	for(;!isdigit(ch);ch=getchar())f|=(ch=='-');
	for(;isdigit(ch);ch=getchar())x=x*10+ch-'0';
	if(f)x=-x;
}

const int N=100005,mod=1e9+7;
int f[N],s[N],nxt[N],las[N][3],sum[N][3];
int n,flag,ans=1;
char st[N];

void add(int &x,int y){
	x=(x+y>=mod?x+y-mod:x+y);
}

int main(){
	scanf("%s",st+1);
	n=strlen(st+1);
	rep(i,1,n){
		s[i]=(s[i-1]+1+(st[i]=='b'))%3;
	}
	per(i,n,1){
		if(st[i]==st[i+1])nxt[i]=i+1;
		else nxt[i]=nxt[i+1];
		REP(t,3) las[i][t]=las[i+1][t];
		las[i][s[i]]=i;
	}
	f[0]=1;
	rep(i,1,n){
		add(f[i],f[i-1]);
		int p=nxt[i];
		if(p){
			add(sum[p][s[i-1]],f[i-1]);
			p=las[p][(2*s[i-1]+3-s[i])%3];
			add(f[p],f[i-1]);
		}
		REP(t,3){
			add(sum[i][t],sum[i-1][t]);
			int tmp=(s[i]-t+3)%3;
			if(tmp&&tmp!=(s[i]-s[i-1]+3)%3){
				add(ans,sum[i][t]);
				//printf("%d %d   %d\n",i,t,sum[i][t]);
			}
		}
		if(!flag&&st[i]==st[i-1])
			flag=1,ans+=(i-2)/2;
		if(!s[i-1]&&flag)ans++;
	}
	cout<<ans<<endl;
	return 0;
}