import
java.util.*;
class
GFG
{
static
int
MAX =
26
;
static
Vector<Integer> findCount(String a[],
String b[],
int
n,
int
m)
{
int
[]freq =
new
int
[MAX];
Vector<Integer> smallestFreq =
new
Vector<Integer>();
for
(
int
i =
0
; i < n; i++)
{
String s = a[i];
Arrays.fill(freq,
0
);
for
(
int
j =
0
; j < s.length(); j++)
{
freq[s.charAt(j) -
'a'
]++;
}
for
(
int
j =
0
; j < MAX; j++)
{
if
(freq[j] >
0
)
{
smallestFreq.add(freq[j]);
break
;
}
}
}
Collections.sort(smallestFreq);
Vector<Integer> ans =
new
Vector<Integer>();
for
(
int
i =
0
; i < m; i++)
{
String s = b[i];
Arrays.fill(freq,
0
);
for
(
int
j =
0
; j < s.length(); j++)
{
freq[s.charAt(j) -
'a'
]++;
}
int
frequency =
0
;
for
(
int
j =
0
; j < MAX; j++)
{
if
(freq[j] >
0
)
{
frequency = freq[j];
break
;
}
}
int
[] array =
new
int
[smallestFreq.size()];
int
k =
0
;
for
(Integer val:smallestFreq)
{
array[k] = val;
k++;
}
int
ind = lower_bound(array,
0
,
smallestFreq.size(),
frequency);
ans.add(ind);
}
return
ans;
}
static
int
lower_bound(
int
[] a,
int
low,
int
high,
int
element)
{
while
(low < high)
{
int
middle = low + (high - low) /
2
;
if
(element > a[middle])
low = middle +
1
;
else
high = middle;
}
return
low;
}
static
void
printAnswer(String a[], String b[],
int
n,
int
m)
{
Vector<Integer> ans = findCount(a, b, n, m);
for
(Integer it : ans)
{
System.out.print(it +
" "
);
}
}
public
static
void
main(String[] args)
{
String A[] = {
"aaa"
,
"aa"
,
"bdc"
};
String B[] = {
"cccch"
,
"cccd"
};
int
n = A.length;
int
m = B.length;
printAnswer(A, B, n, m);
}
}