import
java.io.*;
import
java.util.*;
class
GFG {
static
int
maxProduct(
int
i, String s,
int
k,
boolean
[][] dp,
int
[] dp2)
{
if
(i == s.length()) {
return
1
;
}
if
(dp2[i] != -
1
) {
return
dp2[i];
}
int
result =
0
;
for
(
int
j = i; j < s.length(); j++) {
if
(dp[i][j] && j - i +
1
>= k) {
result = Math.max(
result,
(j - i +
1
)
* maxProduct(j +
1
, s, k, dp, dp2));
}
}
result = Math.max(result,
maxProduct(i +
1
, s, k, dp, dp2));
return
dp2[i] = result;
}
static
int
maxPalindromes(String s,
int
k)
{
int
n = s.length();
boolean
[][] dp =
new
boolean
[n +
1
][n +
1
];
int
[] dp2 =
new
int
[n +
1
];
Arrays.fill(dp2, -
1
);
for
(
int
i =
0
; i < n; i++) {
dp[i][i] =
true
;
}
for
(
int
i =
0
; i < n -
1
; i++) {
if
(s.charAt(i) == s.charAt(i +
1
)) {
dp[i][i +
1
] =
true
;
}
}
for
(
int
len =
3
; len < n; len++) {
int
i =
0
, j = len -
1
;
while
(j < n) {
if
(s.charAt(i) == s.charAt(j)) {
if
(dp[i +
1
][j -
1
])
dp[i][j] =
true
;
}
i++;
j++;
}
}
int
ans = maxProduct(
0
, s, k, dp, dp2);
if
(ans ==
1
&& k >
1
)
return
0
;
return
ans;
}
public
static
void
main(String[] args)
{
String S =
"abaccdbbd"
;
int
K =
3
;
System.out.println(maxPalindromes(S, K));
S =
"adbcda"
;
K =
2
;
System.out.println(maxPalindromes(S, K));
S =
"ab"
;
K =
1
;
System.out.println(maxPalindromes(S, K));
}
}