/* 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 dfs(int node, ArrayList<ArrayList<Integer>> newGraph, boolean[] vis,ArrayList<Integer>comp){
vis[node] = true;
comp.add(node);
for(int neg : newGraph.get(node)){
if(!vis[neg]){
dfs(neg, newGraph, vis, comp);
}
}
}
{
// your code goes here
int N = 8;
int[] a = {2, 1, 4, 3, 6, 5, 8, 7};
int[] c = {1, 2, 1, 2, 2, 1, 2, 1};
ArrayList<ArrayList<Integer>> Adj = new ArrayList<>();
for(int i = 0; i <= N; i++) Adj.add(new ArrayList<>());
int[] indegree = new int[N + 1];
for(int i = 0; i < N; i++){
int u = i + 1;
int v = a[i];
Adj.get(u).add(v);
indegree[v]++;
}
Queue<Integer> q = new LinkedList<>();
for(int i = 1; i <= N; i++){
if(indegree[i] == 0){
q.add(i);
}
}
boolean[] sold = new boolean[N + 1];
ArrayList<Integer> Order = new ArrayList<>();
while(!q.isEmpty()){
int animal = q.poll();
Order.add(animal);
sold[animal] = true;
for(int i : Adj.get(animal)){
indegree[i]--;
if(indegree[i] == 0) q.add(i);
}
}
ArrayList<ArrayList<Integer>> newGraph = new ArrayList<>();
for(int i = 0; i <= N; i++) newGraph.add(new ArrayList<>());
for(int i = 0; i < N; i++){
if(!sold[i + 1]){
int u = i + 1;
int v = a[i];
newGraph.get(u).add(v);
}
}
boolean[] vis = new boolean[N + 1];
for(int i = 1; i <= N ; i++){
if(!vis[i] && !sold[i] && !newGraph.get(i).isEmpty()){
ArrayList<Integer> comp = new ArrayList<>();
dfs(i, newGraph, vis, comp);
int minNode = comp.get(0);
for(int node : comp){
if(c[node - 1] < c[minNode -1]){
minNode = node;
}
}
int curr = a[minNode - 1];
while(curr != minNode){
Order.add(curr);
sold[curr] = true;
curr = a[curr - 1];
}
Order.add(minNode);
sold[minNode] = true;
}
}
for(int i
: Order
) System.
out.
print(i
+ " "); }
}
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKaW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CgovKiBOYW1lIG9mIHRoZSBjbGFzcyBoYXMgdG8gYmUgIk1haW4iIG9ubHkgaWYgdGhlIGNsYXNzIGlzIHB1YmxpYy4gKi8KY2xhc3MgSWRlb25lCnsKCQoJcHVibGljIHN0YXRpYyB2b2lkIGRmcyhpbnQgbm9kZSwgQXJyYXlMaXN0PEFycmF5TGlzdDxJbnRlZ2VyPj4gbmV3R3JhcGgsIGJvb2xlYW5bXSB2aXMsQXJyYXlMaXN0PEludGVnZXI+Y29tcCl7CgkJdmlzW25vZGVdID0gdHJ1ZTsKCQljb21wLmFkZChub2RlKTsKCQlmb3IoaW50IG5lZyA6IG5ld0dyYXBoLmdldChub2RlKSl7CgkJCWlmKCF2aXNbbmVnXSl7CgkJCQlkZnMobmVnLCBuZXdHcmFwaCwgdmlzLCBjb21wKTsKCQkJfQoJCX0KCX0KCQoJcHVibGljIHN0YXRpYyB2b2lkIG1haW4gKFN0cmluZ1tdIGFyZ3MpIHRocm93cyBqYXZhLmxhbmcuRXhjZXB0aW9uCgl7CgkJLy8geW91ciBjb2RlIGdvZXMgaGVyZQoJCWludCBOID0gODsKCQlpbnRbXSBhID0gezIsIDEsIDQsIDMsIDYsIDUsIDgsIDd9OwoJCWludFtdIGMgPSB7MSwgMiwgMSwgMiwgMiwgMSwgMiwgMX07CgkJCgkJQXJyYXlMaXN0PEFycmF5TGlzdDxJbnRlZ2VyPj4gQWRqID0gbmV3IEFycmF5TGlzdDw+KCk7CgkJCgkJZm9yKGludCBpID0gMDsgaSA8PSBOOyBpKyspIEFkai5hZGQobmV3IEFycmF5TGlzdDw+KCkpOwoJCQoJCWludFtdIGluZGVncmVlID0gbmV3IGludFtOICsgMV07CgkJCgkJZm9yKGludCBpID0gMDsgaSA8IE47IGkrKyl7CgkJCWludCB1ID0gaSArIDE7CgkJCWludCB2ID0gYVtpXTsKCQkJQWRqLmdldCh1KS5hZGQodik7CgkJCWluZGVncmVlW3ZdKys7CgkJfQoJCQoJCVF1ZXVlPEludGVnZXI+IHEgPSBuZXcgTGlua2VkTGlzdDw+KCk7CgkJCgkJZm9yKGludCBpID0gMTsgaSA8PSBOOyBpKyspewoJCQlpZihpbmRlZ3JlZVtpXSA9PSAwKXsKCQkJCXEuYWRkKGkpOwoJCQl9CgkJfQoJCQoJCWJvb2xlYW5bXSBzb2xkID0gbmV3IGJvb2xlYW5bTiArIDFdOwoJCQoJCUFycmF5TGlzdDxJbnRlZ2VyPiBPcmRlciA9IG5ldyBBcnJheUxpc3Q8PigpOwoJCQoJCXdoaWxlKCFxLmlzRW1wdHkoKSl7CgkJCWludCBhbmltYWwgPSBxLnBvbGwoKTsKCQkJT3JkZXIuYWRkKGFuaW1hbCk7CgkJCXNvbGRbYW5pbWFsXSA9IHRydWU7CgkJCWZvcihpbnQgaSA6IEFkai5nZXQoYW5pbWFsKSl7CgkJCQlpbmRlZ3JlZVtpXS0tOwoJCQkJaWYoaW5kZWdyZWVbaV0gPT0gMCkgcS5hZGQoaSk7CgkJCX0KCQl9CgkJCgkJQXJyYXlMaXN0PEFycmF5TGlzdDxJbnRlZ2VyPj4gbmV3R3JhcGggPSBuZXcgQXJyYXlMaXN0PD4oKTsKCQkKCQlmb3IoaW50IGkgPSAwOyBpIDw9IE47IGkrKykgbmV3R3JhcGguYWRkKG5ldyBBcnJheUxpc3Q8PigpKTsKCQkKCQlmb3IoaW50IGkgPSAwOyBpIDwgTjsgaSsrKXsKCQkJaWYoIXNvbGRbaSArIDFdKXsKCQkJaW50IHUgPSBpICsgMTsKCQkJaW50IHYgPSBhW2ldOwoJCQluZXdHcmFwaC5nZXQodSkuYWRkKHYpOwoJCQl9CgkJfQoJCQoJCWJvb2xlYW5bXSB2aXMgPSBuZXcgYm9vbGVhbltOICsgMV07CgkJCgkJZm9yKGludCBpID0gMTsgaSA8PSBOIDsgaSsrKXsKCQkJaWYoIXZpc1tpXSAmJiAhc29sZFtpXSAmJiAhbmV3R3JhcGguZ2V0KGkpLmlzRW1wdHkoKSl7CgkJCQlBcnJheUxpc3Q8SW50ZWdlcj4gY29tcCA9IG5ldyBBcnJheUxpc3Q8PigpOwoJCQkJZGZzKGksIG5ld0dyYXBoLCB2aXMsIGNvbXApOwoJCQkJCgkJCQlpbnQgbWluTm9kZSA9IGNvbXAuZ2V0KDApOwoJCQkJZm9yKGludCBub2RlIDogY29tcCl7CgkJCQkJaWYoY1tub2RlIC0gMV0gPCBjW21pbk5vZGUgLTFdKXsKCQkJCQkJbWluTm9kZSA9IG5vZGU7CgkJCQkJfQoJCQkJfQoJCQkJCgkJCQlpbnQgY3VyciA9IGFbbWluTm9kZSAtIDFdOwoJCQkJd2hpbGUoY3VyciAhPSBtaW5Ob2RlKXsKCQkJCQlPcmRlci5hZGQoY3Vycik7CgkJCQkJc29sZFtjdXJyXSA9IHRydWU7CgkJCQkJY3VyciA9IGFbY3VyciAtIDFdOwoJCQkJfQoJCQkJT3JkZXIuYWRkKG1pbk5vZGUpOwoJCQkJc29sZFttaW5Ob2RlXSA9IHRydWU7CgkJCQl9CgkJfQoJCQoJCWZvcihpbnQgaSA6IE9yZGVyKSBTeXN0ZW0ub3V0LnByaW50KGkgKyAiICIpOwoJfQp9