#include<bits/stdc++.h>
using namespace std;
#define rep(i,a,b) for(int i=a;i<b;i++)
typedef long long ll;
bool is_prime(int x){if(x<2)return false;int m=sqrt(x+0.5);rep(i,2,m+1)if(x%i==0)return false;return true;}
const int maxn=300+10;
const int mod=1e9;
char s[maxn];
int d[maxn][maxn];
int dp(int i,int j){
if(i==j)return 1;
if(s[i]!=s[j])return 0;
int &ans=d[i][j];
if(ans>=0)return d[i][j];
ans=0;
for(int k=i+2;k<=j;k++){
if(s[i]!=s[k])continue;
ans=(ans+(ll)dp(i+1,k-1)*(ll)dp(k,j))%mod;
}
return ans;
}
/*
ABABABA
AB
枚举起点和终点,在枚举中点
*/
int main(){
while(scanf("%s",s)==1){
memset(d,-1,sizeof(d));
printf("%d\n",dp(0,strlen(s)-1));
}
return 0;
}