#pragma GCC optimize("Ofast")
#pragma GCC optimize("unroll-loops")
#pragma GCC optimize("inline")
#include<bits/stdc++.h>
using namespace std;
template < class S, class T> inline S chmin( S & a, T b) {
if ( a> b) {
a= b;
}
return a;
}
template < class S, class T> inline S moddw_L( S a, const T b) {
a % = b;
if ( a < 0 ) {
a + = b;
}
return a;
}
template < class T> int PalindromeCost( const int N, const T A[ ] ) {
int i;
int res = 0 ;
for ( i= ( 0 ) ; i< ( N/ 2 ) ; i++ ) {
if ( A[ i] ! = A[ N- 1 - i] ) {
res++ ;
}
}
return res;
}
template < class T> int PalindromeCost( const vector< T> & A) {
const int N = A.size ( ) ;
int i;
int res = 0 ;
for ( i= ( 0 ) ; i< ( N/ 2 ) ; i++ ) {
if ( A[ i] ! = A[ N- 1 - i] ) {
res++ ;
}
}
return res;
}
int PalindromeCost( const string & A) {
const int N = A.size ( ) ;
int i;
int res = 0 ;
for ( i= ( 0 ) ; i< ( N/ 2 ) ; i++ ) {
if ( A[ i] ! = A[ N- 1 - i] ) {
res++ ;
}
}
return res;
}
template < class T, class S> int Slice( const int N, const T A[ ] , const long long bg, const long long ed, const long long step, S res[ ] ) {
long long i;
long long k;
long long s;
int len = 0 ;
if ( N == 0 ) {
return 0 ;
}
s = ( moddw_L( step,N) ) ;
assert ( step ! = 0 ) ;
if ( step > 0 ) {
for ( i = bg, k = ( moddw_L( bg,N) ) ; i < ed; i + = step, k + = s) {
if ( k >= N) {
k - = N;
}
res[ len++ ] = A[ k] ;
}
}
else {
for ( i = bg, k = ( moddw_L( bg,N) ) ; i > ed; i + = step, k + = s) {
if ( k >= N) {
k - = N;
}
res[ len++ ] = A[ k] ;
}
}
return len;
}
template < class T> vector< T> Slice( const vector< T> & A, const long long bg, const long long ed, const long long step) {
const int N = A.size ( ) ;
long long i;
long long k;
long long s;
vector< T> res;
if ( N == 0 ) {
return res;
}
s = ( moddw_L( step,N) ) ;
assert ( step ! = 0 ) ;
if ( step > 0 ) {
for ( i = bg, k = ( moddw_L( bg,N) ) ; i < ed; i + = step, k + = s) {
if ( k >= N) {
k - = N;
}
res.push_back ( A[ k] ) ;
}
}
else {
for ( i = bg, k = ( moddw_L( bg,N) ) ; i > ed; i + = step, k + = s) {
if ( k >= N) {
k - = N;
}
res.push_back ( A[ k] ) ;
}
}
return res;
}
string Slice( const string & A, const long long bg, const long long ed, const long long step) {
const int N = A.size ( ) ;
long long i;
long long k;
long long s;
string res;
if ( N == 0 ) {
return res;
}
s = ( moddw_L( step,N) ) ;
assert ( step ! = 0 ) ;
if ( step > 0 ) {
for ( i = bg, k = ( moddw_L( bg,N) ) ; i < ed; i + = step, k + = s) {
if ( k >= N) {
k - = N;
}
res + = A[ k] ;
}
}
else {
for ( i = bg, k = ( moddw_L( bg,N) ) ; i > ed; i + = step, k + = s) {
if ( k >= N) {
k - = N;
}
res + = A[ k] ;
}
}
return res;
}
#define main dummy_main
int main( ) {
return 0 ;
}
#undef main
int calc( const string & s) {
int N = s.size ( ) ;
int res = 1073709056 ;
int k;
for ( k= ( 1 ) ; k< ( N) ; k++ ) {
if ( N% k== 0 ) {
int WKqLrJHZ;
remove_reference< decltype( PalindromeCost( Slice( s,WKqLrJHZ,N,k) ) ) > :: type QAAnbtfa;
int om7Ebh6q = 0 ;
if ( ( 0 ) > ( ( k) - 1 ) ) {
QAAnbtfa = 0 ;
}
else {
for ( WKqLrJHZ = 0 ; WKqLrJHZ <= ( k) - 1 ; WKqLrJHZ++ ) {
if ( om7Ebh6q == 0 ) {
QAAnbtfa = PalindromeCost( Slice( s,WKqLrJHZ,N,k) ) ;
om7Ebh6q = 1 ;
continue ;
}
QAAnbtfa + = PalindromeCost( Slice( s,WKqLrJHZ,N,k) ) ;
}
if ( om7Ebh6q== 0 ) {
QAAnbtfa = 0 ;
}
}
chmin( res, QAAnbtfa) ;
}
}
return res;
}
class Solution{
public :
int minimumChanges( string s, int k) {
int myTeyldV;
int i;
int j;
int N = s.size ( ) ;
static long long cost[ 201 ] [ 201 ] ;
static long long dp[ 201 ] ;
for ( i= ( 0 ) ; i< ( N) ; i++ ) {
for ( j= ( i) ; j< ( N) ; j++ ) {
cost[ i] [ j] = calc( s.substr ( i,j- i+ 1 ) ) ;
}
}
dp[ 0 ] = 0 ;
for ( i= ( 1 ) ; i< ( N+ 1 ) ; i++ ) {
dp[ i] = 4611686016279904256LL;
}
for ( myTeyldV= ( 0 ) ; myTeyldV< ( k) ; myTeyldV++ ) {
for ( i= ( N+ 1 ) - 1 ; i>= ( 0 ) ; i-- ) {
dp[ i] = 4611686016279904256LL;
for ( j= ( 0 ) ; j< ( i) ; j++ ) {
chmin( dp[ i] , dp[ j] + cost[ j] [ i- 1 ] ) ;
}
}
}
return dp[ N] ;
}
}
;
// cLay version 20231031-1
// --- original code ---
// #define main dummy_main
// {}
// #undef main
//
// int calc(const string &s){
// int N = s.size(), res = int_inf, k;
// rep(k,1,N) if(N%k==0) res <?= sum[i,0,k]( PalindromeCost(Slice(s,i,N,k)) );
// return res;
// }
//
// class Solution {
// public:
// int minimumChanges(string s, int k) {
// int i, j, N = s.size();
// static ll cost[201][201], dp[201];
//
// rep(i,N) rep(j,i,N) cost[i][j] = calc(s.substr(i,j-i+1));
//
// dp[0] = 0;
// rep(i,1,N+1) dp[i] = ll_inf;
//
// rep(k){
// rrep(i,N+1){
// dp[i] = ll_inf;
// rep(j,i) dp[i] <?= dp[j] + cost[j][i-1];
// }
// }
//
// return dp[N];
// }
// };
I3ByYWdtYSBHQ0Mgb3B0aW1pemUoIk9mYXN0IikKI3ByYWdtYSBHQ0Mgb3B0aW1pemUoInVucm9sbC1sb29wcyIpCiNwcmFnbWEgR0NDIG9wdGltaXplKCJpbmxpbmUiKQojaW5jbHVkZTxiaXRzL3N0ZGMrKy5oPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwp0ZW1wbGF0ZTxjbGFzcyBTLCBjbGFzcyBUPiBpbmxpbmUgUyBjaG1pbihTICZhLCBUIGIpewogIGlmKGE+Yil7CiAgICBhPWI7CiAgfQogIHJldHVybiBhOwp9CnRlbXBsYXRlPGNsYXNzIFMsIGNsYXNzIFQ+IGlubGluZSBTIG1vZGR3X0woUyBhLCBjb25zdCBUIGIpewogIGEgJT0gYjsKICBpZihhIDwgMCl7CiAgICBhICs9IGI7CiAgfQogIHJldHVybiBhOwp9CnRlbXBsYXRlPGNsYXNzIFQ+IGludCBQYWxpbmRyb21lQ29zdChjb25zdCBpbnQgTiwgY29uc3QgVCBBW10pewogIGludCBpOwogIGludCByZXMgPSAwOwogIGZvcihpPSgwKTtpPChOLzIpO2krKyl7CiAgICBpZihBW2ldICE9IEFbTi0xLWldKXsKICAgICAgcmVzKys7CiAgICB9CiAgfQogIHJldHVybiByZXM7Cn0KdGVtcGxhdGU8Y2xhc3MgVD4gaW50IFBhbGluZHJvbWVDb3N0KGNvbnN0IHZlY3RvcjxUPiAmQSl7CiAgY29uc3QgaW50IE4gPSBBLnNpemUoKTsKICBpbnQgaTsKICBpbnQgcmVzID0gMDsKICBmb3IoaT0oMCk7aTwoTi8yKTtpKyspewogICAgaWYoQVtpXSAhPSBBW04tMS1pXSl7CiAgICAgIHJlcysrOwogICAgfQogIH0KICByZXR1cm4gcmVzOwp9CmludCBQYWxpbmRyb21lQ29zdChjb25zdCBzdHJpbmcgJkEpewogIGNvbnN0IGludCBOID0gQS5zaXplKCk7CiAgaW50IGk7CiAgaW50IHJlcyA9IDA7CiAgZm9yKGk9KDApO2k8KE4vMik7aSsrKXsKICAgIGlmKEFbaV0gIT0gQVtOLTEtaV0pewogICAgICByZXMrKzsKICAgIH0KICB9CiAgcmV0dXJuIHJlczsKfQp0ZW1wbGF0ZTxjbGFzcyBULCBjbGFzcyBTPiBpbnQgU2xpY2UoY29uc3QgaW50IE4sIGNvbnN0IFQgQVtdLCBjb25zdCBsb25nIGxvbmcgYmcsIGNvbnN0IGxvbmcgbG9uZyBlZCwgY29uc3QgbG9uZyBsb25nIHN0ZXAsIFMgcmVzW10pewogIGxvbmcgbG9uZyBpOwogIGxvbmcgbG9uZyBrOwogIGxvbmcgbG9uZyBzOwogIGludCBsZW4gPSAwOwogIGlmKE4gPT0gMCl7CiAgICByZXR1cm4gMDsKICB9CiAgcyA9KG1vZGR3X0woc3RlcCxOKSk7CiAgYXNzZXJ0KHN0ZXAgIT0gMCk7CiAgaWYoc3RlcCA+IDApewogICAgZm9yKGkgPSBiZywgayA9KG1vZGR3X0woYmcsTikpOyBpIDwgZWQ7IGkgKz0gc3RlcCwgayArPSBzKXsKICAgICAgaWYoayA+PSBOKXsKICAgICAgICBrIC09IE47CiAgICAgIH0KICAgICAgcmVzW2xlbisrXSA9IEFba107CiAgICB9CiAgfQogIGVsc2V7CiAgICBmb3IoaSA9IGJnLCBrID0obW9kZHdfTChiZyxOKSk7IGkgPiBlZDsgaSArPSBzdGVwLCBrICs9IHMpewogICAgICBpZihrID49IE4pewogICAgICAgIGsgLT0gTjsKICAgICAgfQogICAgICByZXNbbGVuKytdID0gQVtrXTsKICAgIH0KICB9CiAgcmV0dXJuIGxlbjsKfQp0ZW1wbGF0ZTxjbGFzcyBUPiB2ZWN0b3I8VD4gU2xpY2UoY29uc3QgdmVjdG9yPFQ+ICZBLCBjb25zdCBsb25nIGxvbmcgYmcsIGNvbnN0IGxvbmcgbG9uZyBlZCwgY29uc3QgbG9uZyBsb25nIHN0ZXApewogIGNvbnN0IGludCBOID0gQS5zaXplKCk7CiAgbG9uZyBsb25nIGk7CiAgbG9uZyBsb25nIGs7CiAgbG9uZyBsb25nIHM7CiAgdmVjdG9yPFQ+IHJlczsKICBpZihOID09IDApewogICAgcmV0dXJuIHJlczsKICB9CiAgcyA9KG1vZGR3X0woc3RlcCxOKSk7CiAgYXNzZXJ0KHN0ZXAgIT0gMCk7CiAgaWYoc3RlcCA+IDApewogICAgZm9yKGkgPSBiZywgayA9KG1vZGR3X0woYmcsTikpOyBpIDwgZWQ7IGkgKz0gc3RlcCwgayArPSBzKXsKICAgICAgaWYoayA+PSBOKXsKICAgICAgICBrIC09IE47CiAgICAgIH0KICAgICAgcmVzLnB1c2hfYmFjayhBW2tdKTsKICAgIH0KICB9CiAgZWxzZXsKICAgIGZvcihpID0gYmcsIGsgPShtb2Rkd19MKGJnLE4pKTsgaSA+IGVkOyBpICs9IHN0ZXAsIGsgKz0gcyl7CiAgICAgIGlmKGsgPj0gTil7CiAgICAgICAgayAtPSBOOwogICAgICB9CiAgICAgIHJlcy5wdXNoX2JhY2soQVtrXSk7CiAgICB9CiAgfQogIHJldHVybiByZXM7Cn0Kc3RyaW5nIFNsaWNlKGNvbnN0IHN0cmluZyAmQSwgY29uc3QgbG9uZyBsb25nIGJnLCBjb25zdCBsb25nIGxvbmcgZWQsIGNvbnN0IGxvbmcgbG9uZyBzdGVwKXsKICBjb25zdCBpbnQgTiA9IEEuc2l6ZSgpOwogIGxvbmcgbG9uZyBpOwogIGxvbmcgbG9uZyBrOwogIGxvbmcgbG9uZyBzOwogIHN0cmluZyByZXM7CiAgaWYoTiA9PSAwKXsKICAgIHJldHVybiByZXM7CiAgfQogIHMgPShtb2Rkd19MKHN0ZXAsTikpOwogIGFzc2VydChzdGVwICE9IDApOwogIGlmKHN0ZXAgPiAwKXsKICAgIGZvcihpID0gYmcsIGsgPShtb2Rkd19MKGJnLE4pKTsgaSA8IGVkOyBpICs9IHN0ZXAsIGsgKz0gcyl7CiAgICAgIGlmKGsgPj0gTil7CiAgICAgICAgayAtPSBOOwogICAgICB9CiAgICAgIHJlcyArPSBBW2tdOwogICAgfQogIH0KICBlbHNlewogICAgZm9yKGkgPSBiZywgayA9KG1vZGR3X0woYmcsTikpOyBpID4gZWQ7IGkgKz0gc3RlcCwgayArPSBzKXsKICAgICAgaWYoayA+PSBOKXsKICAgICAgICBrIC09IE47CiAgICAgIH0KICAgICAgcmVzICs9IEFba107CiAgICB9CiAgfQogIHJldHVybiByZXM7Cn0KI2RlZmluZSBtYWluIGR1bW15X21haW4KaW50IG1haW4oKXsKICByZXR1cm4gMDsKfQojdW5kZWYgbWFpbgppbnQgY2FsYyhjb25zdCBzdHJpbmcgJnMpewogIGludCBOID0gcy5zaXplKCk7CiAgaW50IHJlcyA9IDEwNzM3MDkwNTY7CiAgaW50IGs7CiAgZm9yKGs9KDEpO2s8KE4pO2srKyl7CiAgICBpZihOJWs9PTApewogICAgICBpbnQgV0txTHJKSFo7CiAgICAgIHJlbW92ZV9yZWZlcmVuY2U8ZGVjbHR5cGUoIFBhbGluZHJvbWVDb3N0KFNsaWNlKHMsV0txTHJKSFosTixrKSkgKT46OnR5cGUgUUFBbmJ0ZmE7CiAgICAgIGludCBvbTdFYmg2cSA9IDA7CiAgICAgIGlmKCgwKSA+ICgoayktMSkpewogICAgICAgIFFBQW5idGZhID0gMDsKICAgICAgfQogICAgICBlbHNlewogICAgICAgIGZvcihXS3FMckpIWiA9IDA7IFdLcUxySkhaIDw9IChrKS0xOyBXS3FMckpIWisrKXsKICAgICAgICAgIGlmKG9tN0ViaDZxID09IDApewogICAgICAgICAgICBRQUFuYnRmYSA9ICBQYWxpbmRyb21lQ29zdChTbGljZShzLFdLcUxySkhaLE4saykpIDsKICAgICAgICAgICAgb203RWJoNnEgPSAxOwogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgIH0KICAgICAgICAgIFFBQW5idGZhICs9ICBQYWxpbmRyb21lQ29zdChTbGljZShzLFdLcUxySkhaLE4saykpIDsKICAgICAgICB9CiAgICAgICAgaWYob203RWJoNnE9PTApewogICAgICAgICAgUUFBbmJ0ZmEgPSAwOwogICAgICAgIH0KICAgICAgfQogICAgICBjaG1pbihyZXMsIFFBQW5idGZhKTsKICAgIH0KICB9CiAgcmV0dXJuIHJlczsKfQpjbGFzcyBTb2x1dGlvbnsKICBwdWJsaWM6CiAgaW50IG1pbmltdW1DaGFuZ2VzKHN0cmluZyBzLCBpbnQgayl7CiAgICBpbnQgbXlUZXlsZFY7CiAgICBpbnQgaTsKICAgIGludCBqOwogICAgaW50IE4gPSBzLnNpemUoKTsKICAgIHN0YXRpYyBsb25nIGxvbmcgY29zdFsyMDFdWzIwMV07CiAgICBzdGF0aWMgbG9uZyBsb25nIGRwWzIwMV07CiAgICBmb3IoaT0oMCk7aTwoTik7aSsrKXsKICAgICAgZm9yKGo9KGkpO2o8KE4pO2orKyl7CiAgICAgICAgY29zdFtpXVtqXSA9IGNhbGMocy5zdWJzdHIoaSxqLWkrMSkpOwogICAgICB9CiAgICB9CiAgICBkcFswXSA9IDA7CiAgICBmb3IoaT0oMSk7aTwoTisxKTtpKyspewogICAgICBkcFtpXSA9IDQ2MTE2ODYwMTYyNzk5MDQyNTZMTDsKICAgIH0KICAgIGZvcihteVRleWxkVj0oMCk7bXlUZXlsZFY8KGspO215VGV5bGRWKyspewogICAgICBmb3IoaT0oTisxKS0xO2k+PSgwKTtpLS0pewogICAgICAgIGRwW2ldID0gNDYxMTY4NjAxNjI3OTkwNDI1NkxMOwogICAgICAgIGZvcihqPSgwKTtqPChpKTtqKyspewogICAgICAgICAgY2htaW4oZHBbaV0sIGRwW2pdICsgY29zdFtqXVtpLTFdKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBkcFtOXTsKICB9Cn0KOwovLyBjTGF5IHZlcnNpb24gMjAyMzEwMzEtMQoKLy8gLS0tIG9yaWdpbmFsIGNvZGUgLS0tCi8vICNkZWZpbmUgbWFpbiBkdW1teV9tYWluCi8vIHt9Ci8vICN1bmRlZiBtYWluCi8vIAovLyBpbnQgY2FsYyhjb25zdCBzdHJpbmcgJnMpewovLyAgIGludCBOID0gcy5zaXplKCksIHJlcyA9IGludF9pbmYsIGs7Ci8vICAgcmVwKGssMSxOKSBpZihOJWs9PTApIHJlcyA8Pz0gc3VtW2ksMCxrXSggUGFsaW5kcm9tZUNvc3QoU2xpY2UocyxpLE4saykpICk7Ci8vICAgcmV0dXJuIHJlczsKLy8gfQovLyAKLy8gY2xhc3MgU29sdXRpb24gewovLyBwdWJsaWM6Ci8vICAgaW50IG1pbmltdW1DaGFuZ2VzKHN0cmluZyBzLCBpbnQgaykgewovLyAgICAgaW50IGksIGosIE4gPSBzLnNpemUoKTsKLy8gICAgIHN0YXRpYyBsbCBjb3N0WzIwMV1bMjAxXSwgZHBbMjAxXTsKLy8gCi8vICAgICByZXAoaSxOKSByZXAoaixpLE4pIGNvc3RbaV1bal0gPSBjYWxjKHMuc3Vic3RyKGksai1pKzEpKTsKLy8gCi8vICAgICBkcFswXSA9IDA7Ci8vICAgICByZXAoaSwxLE4rMSkgZHBbaV0gPSBsbF9pbmY7Ci8vIAovLyAgICAgcmVwKGspewovLyAgICAgICBycmVwKGksTisxKXsKLy8gICAgICAgICBkcFtpXSA9IGxsX2luZjsKLy8gICAgICAgICByZXAoaixpKSBkcFtpXSA8Pz0gZHBbal0gKyBjb3N0W2pdW2ktMV07Ci8vICAgICAgIH0KLy8gICAgIH0KLy8gCi8vICAgICByZXR1cm4gZHBbTl07Ci8vICAgfQovLyB9Owo=