#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long LL;
const int maxn=200005,P=998244353;
char a[maxn];
int n,f[maxn][3][3][2],sum;

bool Allsame(){
  for(int i=2;i<=n;i++) if(a[i]!=a[i-1]) return false;
  return true;
}
bool NoAdjsame(){
  for(int i=2;i<=n;i++) if(a[i]==a[i-1]) return false;
  return true;
}
int main(){
  scanf("%s",a+1); n=strlen(a+1);
  if(Allsame()) return puts("1"), 0;
  if(n<=3){
    if(n==2) puts("2");
    else{
      if(a[1]!=a[2]&&a[1]!=a[3]&&a[2]!=a[3]) puts("3");
      else if(a[1]==a[3]) puts("7");
      else puts("6");
    }
    return 0;
  }
  for(int i=1;i<=n;i++) sum=(sum+a[i]-'a')%3;
  for(int i=0;i<=2;i++) f[1][i][i][0]=1;
  for(int i=1;i<=n-1;i++)
    for(int j=0;j<=2;j++)
      for(int k=0;k<=2;k++)
	for(int t=0;t<=1;t++)
	  for(int l=0;l<=2;l++) (f[i+1][l][(k+l)%3][t|(j==l)]+=f[i][j][k][t])%=P;
  printf("%d\n",((LL)f[n][0][sum][1]+f[n][1][sum][1]+f[n][2][sum][1]+NoAdjsame())%P);
  return 0;
}

### Prompt

Your challenge is to write a Cpp solution to the following problem:

You are given a string S consisting of `a`,`b` and `c`. Find the number of strings that can be possibly obtained by repeatedly performing the following operation zero or more times, modulo 998244353:

* Choose an integer i such that 1\leq i\leq |S|-1 and the i-th and (i+1)-th characters in S are different. Replace each of the i-th and (i+1)-th characters in S with the character that differs from both of them (among `a`, `b` and `c`).

Constraints

* 2 \leq |S| \leq 2 × 10^5
* S consists of `a`, `b` and `c`.

Input

Input is given from Standard Input in the following format:


S


Output

Print the number of strings that can be possibly obtained by repeatedly performing the operation, modulo 998244353.

Examples

Input

abc


Output

3


Input

abbac


Output

65


Input

babacabac


Output

6310


Input

ababacbcacbacacbcbbcbbacbaccacbacbacba


Output

148010497

### Response

```cpp
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long LL;
const int maxn=200005,P=998244353;
char a[maxn];
int n,f[maxn][3][3][2],sum;

bool Allsame(){
  for(int i=2;i<=n;i++) if(a[i]!=a[i-1]) return false;
  return true;
}
bool NoAdjsame(){
  for(int i=2;i<=n;i++) if(a[i]==a[i-1]) return false;
  return true;
}
int main(){
  scanf("%s",a+1); n=strlen(a+1);
  if(Allsame()) return puts("1"), 0;
  if(n<=3){
    if(n==2) puts("2");
    else{
      if(a[1]!=a[2]&&a[1]!=a[3]&&a[2]!=a[3]) puts("3");
      else if(a[1]==a[3]) puts("7");
      else puts("6");
    }
    return 0;
  }
  for(int i=1;i<=n;i++) sum=(sum+a[i]-'a')%3;
  for(int i=0;i<=2;i++) f[1][i][i][0]=1;
  for(int i=1;i<=n-1;i++)
    for(int j=0;j<=2;j++)
      for(int k=0;k<=2;k++)
	for(int t=0;t<=1;t++)
	  for(int l=0;l<=2;l++) (f[i+1][l][(k+l)%3][t|(j==l)]+=f[i][j][k][t])%=P;
  printf("%d\n",((LL)f[n][0][sum][1]+f[n][1][sum][1]+f[n][2][sum][1]+NoAdjsame())%P);
  return 0;
}

```