/* 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);
			}
		}
	}
	
	public static void main (String[] args) throws java.lang.Exception
	{
		// 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 + " ");
	}
}