Problem: As you could know there are no male planes nor female planes. However, each plane on Earth likes some other plane. There are n planes on Earth, numbered from 1 to n, and the plane with number i likes the plane with number fi, where 1 ≤ fi ≤ n and fi ≠ i.

We call a love triangle a situation in which plane A likes plane B, plane B likes plane C and plane C likes plane A. Find out if there is any love triangle on Earth.

Input

The first line contains a single integer n (2 ≤ n ≤ 5000) — the number of planes.

The second line contains n integers f1, f2, ..., fn (1 ≤ fi ≤ n, fi ≠ i), meaning that the i-th plane likes the fi-th.

Output

Output «YES» if there is a love triangle consisting of planes on Earth. Otherwise, output «NO».

You can output any letter in lower case or in upper case.

Examples

Input

5
2 4 5 1 3


Output

YES


Input

5
5 5 5 5 1


Output

NO

Note

In first example plane 2 likes plane 4, plane 4 likes plane 1, plane 1 likes plane 2 and that is a love triangle.

In second example there are no love triangles.

Solution (in JAVA):

Solution:

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.LinkedList;
import java.util.List;

public class Main {
	
	private static BufferedReader br;
	private static BufferedWriter bw;
	private static Graph g;
	
	public Main() {
		br = new BufferedReader(new InputStreamReader(System.in));
		bw = new BufferedWriter(new OutputStreamWriter(System.out));
		g = new Graph();
	}
	
	public static void main(String args[]) throws IOException {
		
		Main m = new Main();
		
		String numPlanes = br.readLine();
		int planes = Integer.parseInt(numPlanes);
		String[] connections = br.readLine().split(" ");
		int[] relations = new int[connections.length];
		br.close();
		for(int i=0;i<connections.length;i++) {
			relations[i] = Integer.parseInt(connections[i]);
		}
		creation(planes,relations);
		
		if(g.loveTriangle()) {
			bw.write("YES");
	
		}else {
			bw.write("NO");

		}
		
		bw.close();
		
	}
	
	public static void creation(int planes,int[] relations) {
		g.createVertexs(planes);
		for(int i=0;i<relations.length;i++) {
			Vertex v = g.getVertexs().get(relations[i]-1);
			g.getVertexs().get(i).createConnections(v);
		}
		
	}

	
	
	public class Graph{
		private List<Vertex> vertexs;
		
		public Graph() {
			vertexs = new LinkedList<>();
		}
		
		public void createVertexs(int v) {
			for(int i=1;i<=v;i++) {
			vertexs.add(new Vertex(i));
			}
		}
		
		public List<Vertex> getVertexs(){
			return vertexs;
		}
		
		public boolean loveTriangle() {
			boolean proof = false;
			for(int i=0;i<vertexs.size();i++) {
				Edge e1 = vertexs.get(i).getEdge();
				Edge e2 = vertexs.get(i).getEdge().getDestination().getEdge();
				Edge e3 = vertexs.get(i).getEdge().getDestination().getEdge().getDestination().getEdge();
				
				if(e1.getOrigin()==e3.getDestination() && e1.getDestination()==e2.getOrigin() && e2.getDestination()== e3.getOrigin()) {
					proof = true;
				}
				
			}
			return proof;
		}
		
	}
	
	
	public class Vertex{
		private int value;
		private Edge connection;
		
		public Vertex(int v) {
			value = v;
		}
		
		public void createConnections(Vertex d) {
			connection = new Edge(this,d);
		}
		
		public Edge getEdge() {
			return connection;
		}
		
		
		public int getValue() {
			return value;
		}
	}
	
	
	public class Edge{
		private Vertex origin;
		private Vertex destination;
		public Edge(Vertex o, Vertex d) {
			origin = o;
			destination = d;
		}
		
		public Vertex getDestination() {
			return destination;
		}
		
		public Vertex getOrigin() {
			return origin;
		}
		
	}
}