#include <iostream>
#include <string>
using namespace std;
#define MOD 1000000007
string s;
int FMem[1047];
int isPalMem[1047][1047];
bool isPal(int b, int e) {
if(b==e || b+1==e) return true;
if(isPalMem[b][e]!=-1) return isPalMem[b][e];
if(s[b]!=s[e-1]) return isPalMem[b][e]=0;
return isPalMem[b][e]=isPal(b+1,e-1);
}
int F(int n) {
if(n==0) return 1;
if(FMem[n]!=-1) return FMem[n];
int res=0;
for(int i=0; i<n; i++)
if(isPal(i,n)) res=(res+F(i))%MOD;
return FMem[n]=res%MOD;
}
int main() {
cin >> s;
for(int i=0; i<s.length()+42; i++) FMem[i]=-1;
for(int i=0; i<s.length()+42; i++)
for(int j=0; j<s.length()+42; j++) isPalMem[i][j]=-1;
cout << F(s.length()) << endl;
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKI2RlZmluZSBNT0QgMTAwMDAwMDAwNwoKc3RyaW5nIHM7CmludCBGTWVtWzEwNDddOwppbnQgaXNQYWxNZW1bMTA0N11bMTA0N107Cgpib29sIGlzUGFsKGludCBiLCBpbnQgZSkgewoJaWYoYj09ZSB8fCBiKzE9PWUpIHJldHVybiB0cnVlOwoJaWYoaXNQYWxNZW1bYl1bZV0hPS0xKSByZXR1cm4gaXNQYWxNZW1bYl1bZV07CglpZihzW2JdIT1zW2UtMV0pIHJldHVybiBpc1BhbE1lbVtiXVtlXT0wOwoJcmV0dXJuIGlzUGFsTWVtW2JdW2VdPWlzUGFsKGIrMSxlLTEpOwp9CgppbnQgRihpbnQgbikgewoJaWYobj09MCkgcmV0dXJuIDE7CglpZihGTWVtW25dIT0tMSkgcmV0dXJuIEZNZW1bbl07CglpbnQgcmVzPTA7Cglmb3IoaW50IGk9MDsgaTxuOyBpKyspCgkJaWYoaXNQYWwoaSxuKSkgcmVzPShyZXMrRihpKSklTU9EOwoJcmV0dXJuIEZNZW1bbl09cmVzJU1PRDsKfQoKaW50IG1haW4oKSB7CgljaW4gPj4gczsKCWZvcihpbnQgaT0wOyBpPHMubGVuZ3RoKCkrNDI7IGkrKykgRk1lbVtpXT0tMTsKCWZvcihpbnQgaT0wOyBpPHMubGVuZ3RoKCkrNDI7IGkrKykKCQlmb3IoaW50IGo9MDsgajxzLmxlbmd0aCgpKzQyOyBqKyspIGlzUGFsTWVtW2ldW2pdPS0xOwoJY291dCA8PCBGKHMubGVuZ3RoKCkpIDw8IGVuZGw7CglyZXR1cm4gMDsKfQ==