#include<bits/stdc++.h>
using namespace std;

#define int long long

#define rep(i,n) for(int i=0;i<(n);i++)
#define pb push_back
#define all(v) (v).begin(),(v).end()
#define fi first
#define se second
typedef vector<int>vint;
typedef pair<int,int>pint;
typedef vector<pint>vpint;

template<typename A,typename B>inline void chmin(A &a,B b){if(a>b)a=b;}
template<typename A,typename B>inline void chmax(A &a,B b){if(a<b)a=b;}


const int mod=1000000007;
inline void add(int &a,int b){
    a+=b;
    if(a>=mod)a-=mod;
}

string S;

int m[111111];

int dp[111111];

signed main(){
    cin>>S;
    
    
    bool flag=true;
    for(int i=0;i+1<S.size();i++)if(S[i]==S[i+1])flag=false;
    
    if(flag){
        cout<<1<<endl;
        return 0;
    }
    
    rep(i,S.size()){
        if(S[i]=='a')m[i+1]=(m[i]+1)%3;
        else m[i+1]=(m[i]+2)%3;
    }

    dp[0]=1;

    queue<int>que[3];
    rep(i,S.size())que[m[i+1]].push(i+1);

    rep(i,S.size()){
        for(int j=1;j<=2;j++){
            if(que[(m[i]+j)%3].size()==0)continue;
            int k=que[(m[i]+j)%3].front();
            add(dp[k],dp[i]);
        }
        que[m[i+1]].pop();
    }

    
    int ans=0;
    for(int i=1;i<=S.size();i++){
        if(m[i]==m[S.size()])add(ans,dp[i]);
    }
    cout<<ans<<endl;
    return 0;
}
