#include<iostream>
#include<string>
using namespace std;
static int step=0;
int mini(int temp1,int temp2,int temp3)
{
int a=(temp1<temp2)?temp1:temp2;
return((a<temp3)?a:temp3);
}
int getmin(string str1,int starter,int ender,int table[][20])
{
int temp1,temp2,temp3;
if(starter>=ender)
return 0;
if(table[starter][ender]==0)
{
step++;
if(str1[starter]==str1[ender])
{
temp1=getmin(str1,starter,ender-1,table)+1;
temp2=getmin(str1,starter+1,ender,table)+1;
temp3=getmin(str1,starter+1,ender-1,table);
table[starter][ender]=mini(temp1,temp2,temp3);
return(mini(temp1,temp2,temp3));
}
else
{
temp1=getmin(str1,starter,ender-1,table)+1;
temp2=getmin(str1,starter+1,ender,table)+1;
temp3=getmin(str1,starter+1,ender-1,table)+2;
table[starter][ender]=mini(temp1,temp2,temp3);
return(mini(temp1,temp2,temp3));
}
}
else
return table[starter][ender];
}
int main()
{
int i,j,k;
string str1;
char str2[20];
int table[20][20];
cin>>str1;
int n=str1.length();
for(i=0;i<20;i++)
for(j=0;j<20;j++)
table[i][j]=0;
i=getmin(str1,0,n-1,table);
cout<<i;
// cout<<step;
}
I2luY2x1ZGU8aW9zdHJlYW0+CiNpbmNsdWRlPHN0cmluZz4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnN0YXRpYyBpbnQgc3RlcD0wOwppbnQgbWluaShpbnQgdGVtcDEsaW50IHRlbXAyLGludCB0ZW1wMykKewogICAgaW50IGE9KHRlbXAxPHRlbXAyKT90ZW1wMTp0ZW1wMjsKICAgIHJldHVybigoYTx0ZW1wMyk/YTp0ZW1wMyk7Cn0KaW50IGdldG1pbihzdHJpbmcgc3RyMSxpbnQgc3RhcnRlcixpbnQgZW5kZXIsaW50IHRhYmxlW11bMjBdKQp7CgogICAgaW50IHRlbXAxLHRlbXAyLHRlbXAzOwogICAgaWYoc3RhcnRlcj49ZW5kZXIpCiAgICAgICAgcmV0dXJuIDA7CiAgICBpZih0YWJsZVtzdGFydGVyXVtlbmRlcl09PTApCiAgICB7CiAgICBzdGVwKys7CiAgICBpZihzdHIxW3N0YXJ0ZXJdPT1zdHIxW2VuZGVyXSkKICAgIHsKICAgICAgICB0ZW1wMT1nZXRtaW4oc3RyMSxzdGFydGVyLGVuZGVyLTEsdGFibGUpKzE7CiAgICAgICAgdGVtcDI9Z2V0bWluKHN0cjEsc3RhcnRlcisxLGVuZGVyLHRhYmxlKSsxOwogICAgICAgIHRlbXAzPWdldG1pbihzdHIxLHN0YXJ0ZXIrMSxlbmRlci0xLHRhYmxlKTsKICAgICAgICB0YWJsZVtzdGFydGVyXVtlbmRlcl09bWluaSh0ZW1wMSx0ZW1wMix0ZW1wMyk7CiAgICAgICAgcmV0dXJuKG1pbmkodGVtcDEsdGVtcDIsdGVtcDMpKTsKICAgIH0KCiAgICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICB0ZW1wMT1nZXRtaW4oc3RyMSxzdGFydGVyLGVuZGVyLTEsdGFibGUpKzE7CiAgICAgICAgdGVtcDI9Z2V0bWluKHN0cjEsc3RhcnRlcisxLGVuZGVyLHRhYmxlKSsxOwogICAgICAgIHRlbXAzPWdldG1pbihzdHIxLHN0YXJ0ZXIrMSxlbmRlci0xLHRhYmxlKSsyOwogICAgICAgIHRhYmxlW3N0YXJ0ZXJdW2VuZGVyXT1taW5pKHRlbXAxLHRlbXAyLHRlbXAzKTsKICAgICAgICByZXR1cm4obWluaSh0ZW1wMSx0ZW1wMix0ZW1wMykpOwogICAgICAgIH0KICAgIH0KICAgIGVsc2UKICAgICAgICByZXR1cm4gdGFibGVbc3RhcnRlcl1bZW5kZXJdOwp9CgoKCgppbnQgbWFpbigpCnsKICAgIGludCBpLGosazsKICAgIHN0cmluZyBzdHIxOwogICAgY2hhciBzdHIyWzIwXTsKICAgIGludCB0YWJsZVsyMF1bMjBdOwogICAgY2luPj5zdHIxOwogICAgaW50IG49c3RyMS5sZW5ndGgoKTsKICAgIGZvcihpPTA7aTwyMDtpKyspCiAgICAgICAgZm9yKGo9MDtqPDIwO2orKykKICAgICAgICB0YWJsZVtpXVtqXT0wOwogICAgaT1nZXRtaW4oc3RyMSwwLG4tMSx0YWJsZSk7CiAgICBjb3V0PDxpOwogICAvLyBjb3V0PDxzdGVwOwp9Cg==