import
java.util.*;
public
class
Main {
public
static
List<Integer> getIntersection(List<List<Integer>> sets) {
List<Integer> result =
new
ArrayList<>();
int
smallSetInd =
0
;
int
minSize = sets.get(
0
).size();
for
(
int
i =
1
; i < sets.size(); i++) {
Collections.sort(sets.get(i));
if
(minSize > sets.get(i).size()) {
minSize = sets.get(i).size();
smallSetInd = i;
}
}
Map<Integer, Integer> elementsMap =
new
HashMap<>();
for
(
int
i =
0
; i < sets.get(smallSetInd).size(); i++) {
int
elem = sets.get(smallSetInd).get(i);
if
(!elementsMap.containsKey(elem)) {
elementsMap.put(elem,
1
);
}
else
{
elementsMap.put(elem, elementsMap.get(elem) +
1
);
}
}
for
(Map.Entry<Integer, Integer> entry : elementsMap.entrySet()) {
int
elem = entry.getKey();
int
freq = entry.getValue();
boolean
bFound =
true
;
for
(
int
j =
0
; j < sets.size(); j++) {
if
(j != smallSetInd) {
if
(sets.get(j).contains(elem)) {
int
lInd = sets.get(j).indexOf(elem);
int
rInd = sets.get(j).lastIndexOf(elem) +
1
;
if
((rInd - lInd) < freq) {
freq = rInd - lInd;
}
}
else
{
bFound =
false
;
break
;
}
}
}
if
(bFound) {
for
(
int
i =
0
; i < freq; i++) {
result.add(elem);
}
}
}
return
result;
}
public
static
void
printSet(List<Integer> s) {
System.out.println(String.join(
" "
, s.stream().map(Object::toString).toArray(String[]::
new
)));
}
public
static
void
testCase1() {
List<List<Integer>> sets =
new
ArrayList<>();
sets.add(Arrays.asList(
1
,
1
,
2
,
2
,
5
));
sets.add(Arrays.asList(
1
,
1
,
4
,
3
,
5
,
9
));
sets.add(Arrays.asList(
1
,
1
,
2
,
3
,
5
,
6
));
List<Integer> r = getIntersection(sets);
printSet(r);
}
public
static
void
main(String[] args) {
testCase1();
}
}