/* package whatever; // don't place package name! */
import java.util.*;
import java.lang.*;
import java.io.*;
/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
{
String input
[] = {"1 2",
"2 4",
"5 6",
"4 7",
"3 5",
"8 9",
"9 10",
"11 12"}; System.
out.
println(answer
(input
)); }
public static List
<Set
<Integer
>> answer
(String[] pairs
){
List<Set<Integer>> list = new LinkedList<>();
// For each pair, separate the numbers
//Initialize with initial set
Set<Integer> init = new HashSet<>();
String[] splitted
= pairs
[0].
split(" "); init.
add(Integer.
parseInt(splitted
[0])); init.
add(Integer.
parseInt(splitted
[1]));
list.add(init);
// To be used to maintain set record ahead
List<Set<Integer>> setsRecord = new LinkedList<>();
boolean found = false;
i1
= Integer.
parseInt((splitted
= s.
split(" "))[0]); i2
= i2
= Integer.
parseInt(splitted
[1]); for(Set<Integer> set : list){
if(set.contains(i1) ||
set.contains(i2)){
// If element has already been found in a set, create a common set
if(setsRecord.size() >= 1){
setsRecord.get(0).addAll(set);
// And remove this set
list.remove(set);
}
else{
set.add(i1);
set.add(i2);
// Maintain a record of this set
setsRecord.add(set);
}
found = true;
}
}
// Empty the set
setsRecord.clear();
if(!found){
Set<Integer> newSet = new HashSet<Integer>();
newSet.add(i1);
newSet.add(i2);
list.add(newSet);
}
found = false;
}
return list;
}
}
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKaW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CgovKiBOYW1lIG9mIHRoZSBjbGFzcyBoYXMgdG8gYmUgIk1haW4iIG9ubHkgaWYgdGhlIGNsYXNzIGlzIHB1YmxpYy4gKi8KY2xhc3MgSWRlb25lCnsKCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKSB0aHJvd3MgamF2YS5sYW5nLkV4Y2VwdGlvbgoJewoJCVN0cmluZyBpbnB1dFtdID0geyIxIDIiLCAiMiA0IiwgIjUgNiIsICI0IDciLCAiMyA1IiwgIjggOSIsICI5IDEwIiwgIjExIDEyIn07CiAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGFuc3dlcihpbnB1dCkpOwoJfQoKICAgIHB1YmxpYyBzdGF0aWMgTGlzdDxTZXQ8SW50ZWdlcj4+IGFuc3dlcihTdHJpbmdbXSBwYWlycyl7CgogICAgICAgIExpc3Q8U2V0PEludGVnZXI+PiBsaXN0ID0gbmV3IExpbmtlZExpc3Q8PigpOwogICAgICAgIC8vIEZvciBlYWNoIHBhaXIsIHNlcGFyYXRlIHRoZSBudW1iZXJzCiAgICAgICAgLy9Jbml0aWFsaXplIHdpdGggaW5pdGlhbCBzZXQKICAgICAgICBTZXQ8SW50ZWdlcj4gaW5pdCA9IG5ldyBIYXNoU2V0PD4oKTsKICAgICAgICBTdHJpbmdbXSBzcGxpdHRlZCA9IHBhaXJzWzBdLnNwbGl0KCIgIik7CiAgICAgICAgaW5pdC5hZGQoSW50ZWdlci5wYXJzZUludChzcGxpdHRlZFswXSkpOwogICAgICAgIGluaXQuYWRkKEludGVnZXIucGFyc2VJbnQoc3BsaXR0ZWRbMV0pKTsKCiAgICAgICAgbGlzdC5hZGQoaW5pdCk7CgogICAgICAgIC8vIFRvIGJlIHVzZWQgdG8gbWFpbnRhaW4gc2V0IHJlY29yZCBhaGVhZAogICAgICAgIExpc3Q8U2V0PEludGVnZXI+PiBzZXRzUmVjb3JkID0gbmV3IExpbmtlZExpc3Q8PigpOwoKICAgICAgICBib29sZWFuIGZvdW5kID0gZmFsc2U7CiAgICAgICAgSW50ZWdlciBpMSwgaTI7CiAgICAgICAgZm9yKFN0cmluZyBzIDogcGFpcnMpewogICAgICAgICAgICBpMSA9IEludGVnZXIucGFyc2VJbnQoKHNwbGl0dGVkID0gcy5zcGxpdCgiICIpKVswXSk7CiAgICAgICAgICAgIGkyID0gaTIgPSBJbnRlZ2VyLnBhcnNlSW50KHNwbGl0dGVkWzFdKTsKICAgICAgICAgICAgZm9yKFNldDxJbnRlZ2VyPiBzZXQgOiBsaXN0KXsKICAgICAgICAgICAgICAgIGlmKHNldC5jb250YWlucyhpMSkgfHwKICAgICAgICAgICAgICAgICAgICAgICAgc2V0LmNvbnRhaW5zKGkyKSl7CiAgICAgICAgICAgICAgICAgICAgLy8gSWYgZWxlbWVudCBoYXMgYWxyZWFkeSBiZWVuIGZvdW5kIGluIGEgc2V0LCBjcmVhdGUgYSBjb21tb24gc2V0CiAgICAgICAgICAgICAgICAgICAgaWYoc2V0c1JlY29yZC5zaXplKCkgPj0gMSl7CiAgICAgICAgICAgICAgICAgICAgICAgIHNldHNSZWNvcmQuZ2V0KDApLmFkZEFsbChzZXQpOwogICAgICAgICAgICAgICAgICAgICAgICAvLyBBbmQgcmVtb3ZlIHRoaXMgc2V0CiAgICAgICAgICAgICAgICAgICAgICAgIGxpc3QucmVtb3ZlKHNldCk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGVsc2V7CiAgICAgICAgICAgICAgICAgICAgICAgIHNldC5hZGQoaTEpOwogICAgICAgICAgICAgICAgICAgICAgICBzZXQuYWRkKGkyKTsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gTWFpbnRhaW4gYSByZWNvcmQgb2YgdGhpcyBzZXQKICAgICAgICAgICAgICAgICAgICAgICAgc2V0c1JlY29yZC5hZGQoc2V0KTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIC8vIEVtcHR5IHRoZSBzZXQKICAgICAgICAgICAgc2V0c1JlY29yZC5jbGVhcigpOwoKICAgICAgICAgICAgaWYoIWZvdW5kKXsKICAgICAgICAgICAgICAgIFNldDxJbnRlZ2VyPiBuZXdTZXQgPSBuZXcgSGFzaFNldDxJbnRlZ2VyPigpOwogICAgICAgICAgICAgICAgbmV3U2V0LmFkZChpMSk7CiAgICAgICAgICAgICAgICBuZXdTZXQuYWRkKGkyKTsKICAgICAgICAgICAgICAgIGxpc3QuYWRkKG5ld1NldCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZm91bmQgPSBmYWxzZTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGxpc3Q7CiAgICB9Cn0=
[[1, 2, 4, 7], [3, 5, 6], [8, 9, 10], [11, 12]]