#include <cstdio>
#include <cstdlib>
#include <cstring>

const int MOD=1e9+7;

void addmod(int& x,int y){x=(x+y)%MOD;}

int dp[100005][3][2][2];
//i, trail sum, cana, canb

int N;
char str[100005];

void zebra(){
  for(int i=1;i<N;i++){
    if(str[i]==str[i-1]) return;
  }
  printf("1\n");
  exit(0);
}

int main(){
  scanf("%s",str);
  N=strlen(str);
  zebra();
  dp[0][0][1][1]=1;
  for(int i=0;i<N;i++){
    str[i]=str[i]-'a'+1;
    for(int s=0;s<3;s++){
      for(int a=0;a<2;a++){
	for(int b=0;b<2;b++){
	  int v=dp[i][s][a][b];
	  int s2=(s+str[i])%3;
	  switch(s2){
	  case 1:
	    if(a) addmod(dp[i+1][0][1][1],v);
	    addmod(dp[i+1][s2][0][b],v);
	    break;
	  case 2:
	    if(b) addmod(dp[i+1][0][1][1],v);
	    addmod(dp[i+1][s2][a][0],v);
	    break;
	  case 0:
	    addmod(dp[i+1][s2][a][b],v);
	    break;
	  }
	}
      }
    }
  }
  int ans=0;
  for(int a=0;a<2;a++){
    for(int b=0;b<2;b++){
      addmod(ans,dp[N][0][a][b]);
    }
  }
  int sum=0;
  for(int i=0;i<N;i++){
    sum=(sum+str[i])%3;
  }
  if(sum==0) addmod(ans,MOD-1);
  printf("%d\n",ans);
  return 0;
}
