#include <cstdio>
#include <cstring>
#include <string>
#include <iostream>
#include <cmath>
#include <bitset>
#include <vector>
#include <map>
#include <set>
#include <queue>
#include <deque>
#include <algorithm>
using namespace std;
typedef long long int ll;
typedef pair<int, int> P;

const ll MOD=998244353ll;

ll powmod(ll a, ll k){
    ll ap=a, ans=1;
    while(k>0){
        if(k%2==1){
            ans*=ap;
            ans%=MOD;
        }
        ap=ap*ap;
        ap%=MOD;
        k/=2;
    }
    return ans;
}

int main()
{
  string s;
  cin>>s;
  int n=s.size();
  if(n==2){
    if(s[0]==s[1]) cout<<1<<endl;
    else cout<<2<<endl;
    return 0;
  }else if(n==3){
    if(s[0]==s[1] && s[1]==s[2]){
      cout<<1<<endl;
    }else if(s[0]!=s[1] && s[1]!=s[2] && s[2]!=s[0]){
      cout<<3<<endl;
    }else if(s[0]==s[2]){
      cout<<7<<endl;
    }else{
      cout<<6<<endl;
    }
    return 0;
  }
  int m=0;
  bool diff=1;
  bool same=1;
  for(int i=0; i<n; i++){
    m+=(s[i]-'a');
    m%=3;
    if(i+1<n && s[i]==s[i+1]) diff=0;
    if(i+1<n && s[i]!=s[i+1]) same=0;
  }
  if(same){
    cout<<1<<endl;
    return 0;
  }
  ll ans=powmod(3ll, (ll)(n-1))+MOD-powmod(2ll, (ll)(n-1));
  if(n%3==0){
    if(m==0){
      ans-=powmod(2ll, (ll)(n/3));
      ans+=MOD;
    }else{
      ans+=powmod(2ll, (ll)(n/3-1));
    }
  }
  ans%=MOD;
  if(diff){
    ans++;
    ans%=MOD;
  }
  cout<<ans<<endl;
	return 0;
}
### Prompt

Please formulate 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 <string>
#include <iostream>
#include <cmath>
#include <bitset>
#include <vector>
#include <map>
#include <set>
#include <queue>
#include <deque>
#include <algorithm>
using namespace std;
typedef long long int ll;
typedef pair<int, int> P;

const ll MOD=998244353ll;

ll powmod(ll a, ll k){
    ll ap=a, ans=1;
    while(k>0){
        if(k%2==1){
            ans*=ap;
            ans%=MOD;
        }
        ap=ap*ap;
        ap%=MOD;
        k/=2;
    }
    return ans;
}

int main()
{
  string s;
  cin>>s;
  int n=s.size();
  if(n==2){
    if(s[0]==s[1]) cout<<1<<endl;
    else cout<<2<<endl;
    return 0;
  }else if(n==3){
    if(s[0]==s[1] && s[1]==s[2]){
      cout<<1<<endl;
    }else if(s[0]!=s[1] && s[1]!=s[2] && s[2]!=s[0]){
      cout<<3<<endl;
    }else if(s[0]==s[2]){
      cout<<7<<endl;
    }else{
      cout<<6<<endl;
    }
    return 0;
  }
  int m=0;
  bool diff=1;
  bool same=1;
  for(int i=0; i<n; i++){
    m+=(s[i]-'a');
    m%=3;
    if(i+1<n && s[i]==s[i+1]) diff=0;
    if(i+1<n && s[i]!=s[i+1]) same=0;
  }
  if(same){
    cout<<1<<endl;
    return 0;
  }
  ll ans=powmod(3ll, (ll)(n-1))+MOD-powmod(2ll, (ll)(n-1));
  if(n%3==0){
    if(m==0){
      ans-=powmod(2ll, (ll)(n/3));
      ans+=MOD;
    }else{
      ans+=powmod(2ll, (ll)(n/3-1));
    }
  }
  ans%=MOD;
  if(diff){
    ans++;
    ans%=MOD;
  }
  cout<<ans<<endl;
	return 0;
}
```