/* 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
{
public static void main
(String[] args
) {
int[] values = {20, 30, 36, 40};
Vertex[] g = new Vertex[values.length];
for(int i=0; i<g.length; i++)
g[i] = new Vertex(values[i]);
for(int i=0; i<g.length; i++)
for(int j=0; j<g.length; j++)
if(i != j && g[j].id >= g[i].id-16 && g[j].id <= g[i].id+8)
g[i].adj.add(g[j]);
Set
<Vertex
> toVisit
= new HashSet
<>(Arrays.
asList(g
)); LinkedList<Vertex> path = new LinkedList<>();
for(int i=0; i<g.length; i++)
{
path.addLast(g[i]);
toVisit.remove(g[i]);
findPaths(g[i], path, toVisit);
toVisit.add(g[i]);
path.removeLast();
}
}
static void findPaths(Vertex v, LinkedList<Vertex> path, Set<Vertex> toVisit)
{
if(toVisit.isEmpty())
{
return;
}
for(Vertex av : v.adj)
{
if(toVisit.contains(av))
{
toVisit.remove(av);
path.addLast(av);
findPaths(av, path, toVisit);
path.removeLast();
toVisit.add(av);
}
}
}
static class Vertex
{
int id;
List<Vertex> adj;
Vertex(int id)
{
this.id = id;
adj = new ArrayList<>();
}
{
}
}
}
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKaW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CgovKiBOYW1lIG9mIHRoZSBjbGFzcyBoYXMgdG8gYmUgIk1haW4iIG9ubHkgaWYgdGhlIGNsYXNzIGlzIHB1YmxpYy4gKi8KY2xhc3MgSWRlb25lCnsKcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJncykKewogIGludFtdIHZhbHVlcyA9IHsyMCwgMzAsIDM2LCA0MH07CiAgCiAgVmVydGV4W10gZyA9IG5ldyBWZXJ0ZXhbdmFsdWVzLmxlbmd0aF07CiAgZm9yKGludCBpPTA7IGk8Zy5sZW5ndGg7IGkrKykgCiAgICBnW2ldID0gbmV3IFZlcnRleCh2YWx1ZXNbaV0pOwogIAogIGZvcihpbnQgaT0wOyBpPGcubGVuZ3RoOyBpKyspIAogICAgZm9yKGludCBqPTA7IGo8Zy5sZW5ndGg7IGorKykKICAgICAgaWYoaSAhPSBqICYmIGdbal0uaWQgPj0gZ1tpXS5pZC0xNiAmJiBnW2pdLmlkIDw9IGdbaV0uaWQrOCkKICAgICAgICBnW2ldLmFkai5hZGQoZ1tqXSk7CgogIFNldDxWZXJ0ZXg+IHRvVmlzaXQgPSBuZXcgSGFzaFNldDw+KEFycmF5cy5hc0xpc3QoZykpOwogIExpbmtlZExpc3Q8VmVydGV4PiBwYXRoID0gbmV3IExpbmtlZExpc3Q8PigpOwogIGZvcihpbnQgaT0wOyBpPGcubGVuZ3RoOyBpKyspCiAgewogICAgcGF0aC5hZGRMYXN0KGdbaV0pOwogICAgdG9WaXNpdC5yZW1vdmUoZ1tpXSk7CiAgICBmaW5kUGF0aHMoZ1tpXSwgcGF0aCwgdG9WaXNpdCk7CiAgICB0b1Zpc2l0LmFkZChnW2ldKTsKICAgIHBhdGgucmVtb3ZlTGFzdCgpOwogIH0KfQoKc3RhdGljIHZvaWQgZmluZFBhdGhzKFZlcnRleCB2LCBMaW5rZWRMaXN0PFZlcnRleD4gcGF0aCwgU2V0PFZlcnRleD4gdG9WaXNpdCkKewogIGlmKHRvVmlzaXQuaXNFbXB0eSgpKQogIHsKICAgIFN5c3RlbS5vdXQucHJpbnRsbihwYXRoKTsKICAgIHJldHVybjsKICB9CgogIGZvcihWZXJ0ZXggYXYgOiB2LmFkaikKICB7CiAgICBpZih0b1Zpc2l0LmNvbnRhaW5zKGF2KSkKICAgIHsKICAgICAgdG9WaXNpdC5yZW1vdmUoYXYpOwogICAgICBwYXRoLmFkZExhc3QoYXYpOwogICAgICBmaW5kUGF0aHMoYXYsIHBhdGgsIHRvVmlzaXQpOwogICAgICBwYXRoLnJlbW92ZUxhc3QoKTsKICAgICAgdG9WaXNpdC5hZGQoYXYpOwogICAgfQogIH0KfQoKc3RhdGljIGNsYXNzIFZlcnRleAp7CiAgaW50IGlkOwogIExpc3Q8VmVydGV4PiBhZGo7CiAgCiAgVmVydGV4KGludCBpZCkKICB7CiAgICB0aGlzLmlkID0gaWQ7CiAgICBhZGogPSBuZXcgQXJyYXlMaXN0PD4oKTsKICB9CiAgCiAgcHVibGljIFN0cmluZyB0b1N0cmluZygpCiAgewogICAgcmV0dXJuIFN0cmluZy52YWx1ZU9mKGlkKTsKICB9Cn0KfQ==
[36, 40, 30, 20]
[40, 30, 36, 20]
[40, 36, 30, 20]