import
java.util.ArrayList;
import
java.util.Collections;
import
java.util.Comparator;
import
java.util.HashMap;
class
GFG
{
static
class
Node {
int
data;
Node next;
public
Node(
int
x) {
data = x;
next =
null
;
}
};
public
static
ArrayList<ArrayList<Integer>> printTriplets(Node head,
int
S) {
HashMap<Integer, Boolean> mp =
new
HashMap<Integer, Boolean>();
ArrayList<ArrayList<Integer>> v =
new
ArrayList<ArrayList<Integer>>();
Node p;
Node q;
mp.put(head.data,
true
);
for
(p = head.next; p.next !=
null
; p = p.next) {
for
(q = p.next; q !=
null
; q = q.next) {
ArrayList<Integer> temp =
new
ArrayList<Integer>();
int
second = p.data;
int
third = q.data;
int
first = S - second - third;
if
(mp.containsKey(first)) {
temp.add(first);
temp.add(second);
temp.add(third);
v.add(temp);
}
}
mp.put(p.data,
true
);
}
return
v;
}
public
static
void
main(String args[]) {
int
S =
15
;
Node head =
null
;
ArrayList<ArrayList<Integer>> ans =
new
ArrayList<ArrayList<Integer>>();
head =
new
Node(
9
);
head.next =
new
Node(
8
);
head.next.next =
new
Node(
6
);
head.next.next.next =
new
Node(
5
);
head.next.next.next.next =
new
Node(
4
);
head.next.next.next.next.next =
new
Node(
2
);
head.next.next.next.next.next.next =
new
Node(
1
);
ans = printTriplets(head, S);
for
(ArrayList<Integer> x : ans) {
Collections.sort(x);
}
Collections.sort(ans,
new
Comparator<ArrayList<Integer>>() {
@Override
public
int
compare(ArrayList<Integer> o1, ArrayList<Integer> o2) {
return
o2.get(
0
) - (o1.get(
0
));
}
});
Collections.reverse(ans);
for
(
int
i =
0
; i < ans.size(); i++) {
for
(
int
j =
0
; j < ans.get(i).size(); j++) {
System.out.print(ans.get(i).get(j) +
" "
);
}
System.out.println(
""
);
}
}
}