#include <iostream>
using namespace std;
int
number[41], starnumber, numbernumber;
struct
HighNumber
{
int n[41];
HighNumber()
{
memset( n, 0, sizeof n );
n[0] = 1;
}
HighNumber
operator * ( const HighNumber& h )
{
HighNumber prod;
prod.n[0] = n[0] + h.n[0];
for( int i = 1; i <= n[0]; i++ )
for( int j = 1; j <= h.n[0]; j++ )
{
prod.n[i + j - 1] += n[i] * h.n[j];
prod.n[i + j] += prod.n[i + j - 1] / 10;
prod.n[i + j - 1] %= 10;
}
while( prod.n[prod.n[0]] == 0 && prod.n[0] > 1 )
prod.n[0]--;
return prod;
}
bool
operator > ( const HighNumber& h ) //高精度数大于号重载最终版
{
if( n[0] > h.n[0] )
return true;
if( n[0] < h.n[0] )
return false;
for( int i = n[0]; i > 0; i-- )
{
if( n[i] > h.n[i] )
return true;
if( n[i] < h.n[i] )
return false;
}
return true;
}
}f[41][7];
ostream&
operator << ( ostream& out, const HighNumber &h )
{
for( int i = h.n[0]; i > 0; i-- )
out << h.n[i];
return out;
}
HighNumber
ConvertToHighNumber( int start, int end ) //看英语就知道是啥意思了
{
HighNumber h;
for( int i = end; i >= start; i-- )
h.n[h.n[0]++] = number[i];
h.n[0]--;
return h;
}
void
__read__()
{
cin >> numbernumber >> starnumber;
for( int i = 1; i <= numbernumber; i++ )
{
char cn;
cin >> cn;
number[i] = cn - '0';
}
}
void
__init__()
{
for( int i = 1; i <= numbernumber; i++ )
f[i][0] = ConvertToHighNumber( 1, i );
}
void
__dp__() //动态规划部分,,很简单的
{
for( int i = 1; i <= starnumber; i++ )
for( int j = i + 1; j <= numbernumber; j++ )
for( int k = i; k < j; k++ )
{
HighNumber ht = f[k][i - 1] * ConvertToHighNumber( k + 1, j );
if( ht > f[j][i] )
f[j][i] = ht;
}
}
void
__outp__()
{
cout << f[numbernumber][starnumber] << endl; //这是重载过的<<,不然要用函数输出地。。
}
int
main()
{
__read__();
__init__();
__dp__();
__outp__();
return 0;
}