dp
dp[i][0]表示第i号位置没有变动,dp[i][i]表示变动
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
const int N=220;
char ss[N];
typedef __int64 LL;
LL dp[N][2];
LL cal(int a,int b){
int n=strlen(ss);
LL ans=0;
if(a==1){
if(ss[0]=='A'){
if(ss[n-1]=='A'){
ans+=dp[n-1][0]+dp[n-1][1];
}
else {
ans+=dp[n-1][0];
}
}
else {
if(ss[n-1]=='A'){
ans+=dp[n-1][1];
}
else {
ans+=dp[n-1][0];
}
}
}
else {
if(ss[0]=='A'){
if(ss[n-1]=='B'){
ans+=dp[n-1][1];
}
}
else {
if(ss[n-1]=='A')ans+=dp[n-1][0]+dp[n-1][1];
else ans+=dp[n-1][0];
}
}
return ans;
}
LL getdp(int a,int b){
memset(dp,0,sizeof(dp));
dp[0][0]=a,dp[0][1]=b;
int n=strlen(ss);
for(int i=1;i<n;i++){
if(ss[i]=='A'){
if(ss[i-1]=='A'){
dp[i][0]+=dp[i-1][0]+dp[i-1][1];
}
else {
dp[i][0]+=dp[i-1][0];
dp[i][1]+=dp[i-1][1];
}
}
else {
if(ss[i-1]=='A'){
dp[i][0]+=dp[i-1][1];
dp[i][1]+=dp[i-1][0]+dp[i-1][1];
}
else {
dp[i][0]+=dp[i-1][0];
dp[i][1]+=dp[i-1][0];
}
}
}
return cal(a,b);
}
int main(){
#ifdef DouBi
freopen("in.cpp","r",stdin);
#endif // DouBi
while(scanf("%s",ss)!=EOF){
LL ans=0;
ans+=getdp(0,1);
ans+=getdp(1,0);
printf("%I64d\n",ans);
}
return 0;
}