using
System;
using
System.Collections.Generic;
class
GFG
{
static
int
maxlen = 100;
public
static
void
generateSubStrings(String s,
Dictionary<String,
int
> mpp)
{
int
l = s.Length;
for
(
int
i = 0; i < l; i++)
{
String temp =
""
;
for
(
int
j = i; j < l; j++)
{
temp += s[j];
if
(mpp.ContainsKey(temp))
{
mpp[temp] = ++mpp[temp];
}
else
mpp.Add(temp, 1);
}
}
}
public
static
void
binomialCoeff(
int
[,] C)
{
int
i, j;
for
(i = 1; i < 100; i++)
{
for
(j = 0; j < 100; j++)
{
if
(j == 0 || j == i)
C[i, j] = 1;
else
C[i, j] = C[i - 1, j - 1] +
C[i - 1, j];
}
}
}
public
static
int
answerQuery(Dictionary<String,
int
> mpp,
int
[,] C,
int
k)
{
int
ans = 0;
foreach
(KeyValuePair<String,
int
> entry
in
mpp)
{
if
(entry.Value >= k)
ans += C[entry.Value, k];
}
return
ans;
}
public
static
void
Main(String[] args)
{
String s =
"aabaab"
;
Dictionary<String,
int
> mpp =
new
Dictionary<String,
int
>();
generateSubStrings(s, mpp);
int
[,] C =
new
int
[maxlen, maxlen];
binomialCoeff(C);
int
[] queries = { 2, 3, 4 };
int
q = queries.Length;
for
(
int
i = 0; i < q; i++)
Console.WriteLine(answerQuery(mpp, C,
queries[i]));
}
}