<span style="font-family: Arial, Helvetica, sans-serif;">#include<iostream></span>
#include<vector>
#include<string>
#include<cmath>
using namespace std;
int strDivided(string &s)
{
int n=s.length();
<span style="font-family: Arial, Helvetica, sans-serif;"><span style="white-space:pre"> </span>//dp[i][j]代表字符串i-j是否为回文串</span>
vector<vector<int>> dp(n,vector<int>(n,0));
<span style="white-space:pre"> </span>//num[i]代表0-i子串中最少回文串划分
vector<int> num(n,0);
for(int i=0;i!=n;i++)
{
dp[i][i]=1;
if(i!=n-1&&s[i]==s[i+1])
{
dp[i][i+1]=1;
}
}
for(int i=0;i!=n;i++)
{
num[i]=i+1;
}
for(int r=3;r<=n;r++)
{
int k=n-r;
for(int i=0;i<=k;i++)
{
if(s[i]==s[i+r-1]&&dp[i+1][i+r-2])
{
dp[i][i+r-1]=1;
}
}
}
for(int i=0;i!=n;i++)
{
if(i!=0)
{
num[i]=min(num[i],num[i-1]+1);
}
for(int j=i+1;j!=n;j++)
{
if(s[i]==s[j]&&(j-i<3||dp[i+1][j-1]))
{
if(i==0)
{
num[j]=1;
}
else
{
num[j]=min(num[j],num[i-1]+1);
}
}
}
}
return num[n-1];
}
int main()
{
string s;
cin>>s;
cout<<strDivided(s)<<endl;
return 0;
}