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.*;
import java.math.*;
import java.security.*;
import java.text.*;
import java.util.*;
import java.util.concurrent.*;
import java.util.regex.*;
import java.util.Arrays;
import java.util.ArrayList;
import java.lang.Math; 
import java.util.Arrays;
import java.util.Comparator;
 
 
 
public class Main 
{ 
    static class FastReader 
    { 
        BufferedReader br; 
        StringTokenizer st; 
  
        public FastReader() 
        { 
            br = new BufferedReader(new
                     InputStreamReader(System.in)); 
        } 
  
        String next() 
        { 
            while (st == null || !st.hasMoreElements()) 
            { 
                try
                { 
                    st = new StringTokenizer(br.readLine()); 
                } 
                catch (IOException  e) 
                { 
                    e.printStackTrace(); 
                } 
            } 
            return st.nextToken(); 
        } 
  
        int nextInt() 
        { 
            return Integer.parseInt(next()); 
        } 
  
        long nextLong() 
        { 
            return Long.parseLong(next()); 
        } 
  
        double nextDouble() 
        { 
            return Double.parseDouble(next()); 
        } 
        
  
        String nextLine() 
        { 
            String str = ""; 
            try
            { 
                str = br.readLine(); 
            } 
            catch (IOException e) 
            { 
                e.printStackTrace(); 
            } 
            return str; 
        } 
    } 

   

    static int binarySearch(int a[] ,int k,int l,int h){
        
        while(l<=h){
         int mid = (l+h)/2;
         if(a[mid]==k) return mid;
         else if(a[mid]>k) h=mid-1;
         else if(a[mid]<k) l=mid+1;
        }
        
        return -1;
    }

    static int binarySearch(ArrayList<Integer> a ,int k,int l,int h){
        
        while(l<=h){
         int mid = (l+h)/2;
         if(a.get(mid)==k) return mid;
         else if(a.get(mid)>k) h=mid-1;
         else if(a.get(mid)<k) l=mid+1;
        }
        
        return -1;
    }

    static String reverse(String input)  
    { 
        char[] a = input.toCharArray(); 
        int l, r = 0; 
        r = a.length - 1; 
  
        for (l = 0; l < r; l++, r--) 
        { 
            // Swap values of l and r  
            char temp = a[l]; 
            a[l] = a[r]; 
            a[r] = temp; 
        } 
        return String.valueOf(a); 
    } 

   
    
    static int gcd(int a, int b) 
    { 
        // Everything divides 0  
        if (a == 0) 
          return b; 
        if (b == 0) 
          return a; 
       if (a == b) 
            return a; 
       if (a > b) 
            return gcd(a-b, b); 
        return gcd(a, b-a); 
    } 

    static int lcm(int a, int b) 
    { 
        return (a*b)/gcd(a, b); 
    } 

    static int solve(int A, int B) 
    { 
    int count = 0; 
    for (int i = 0; i < 21; i++) { 
        if (((A >> i) & 1) != ((B >> i) & 1)) { 
            count++; 
        } 
     } 
  
      return count;
    } 

    static long nCr(int n, int r) 
    { 
    return fact(n) / (fact(r) * 
    fact(n - r)); 
    } 
        
        
    static long fact(int n) 
    { 
    long res = 1; 
    for (int i = 2; i <= n; i++) 
    res = res * i; 
    return res; 
    } 
        
    public static long count(long k) {
    return k * (k - 1) / 2;
    }

    static boolean isPrime(int n) { 
            // if(n==1) return false; 
    if(n==2) return true;
    if (n%2==0) return false; 
    
    int l = (int)Math.sqrt(n);
    for(int i=3;i<=l;i+=2) { 
        if(n%i==0) 
        return false; 
    } 
    return true; 
    }

    static int negMod(int n){
    int a = (n % 1000000007 + 1000000007) % 1000000007;
    return a;
    }
        

    public static int sum(long x) {
    int sum = 0;
    while (x > 0) {
    sum += x % 10;
    x /= 10;
    }
    return sum;
    }
    
    static ArrayList<Long> a = new ArrayList<>();

    static void genLucky(long val , int f , int s){
        if(val>10000000000l) return ;
        if(f==s) a.add(val);
        genLucky(val*10+4, f+1, s);
        genLucky(val*10+7, f, s+1);

    }

    public static int max(int x, int y, int z)
    {
        return (int)Math.max(Math.max(x, y), z);
    }
    
    
    public static int min(int x, int y, int z)
    {
        return (int)Math.min(Math.min(x, y), z);
    }
    
    static void addEdge(ArrayList<ArrayList<Integer>> adj, 
                        int u, int v) 
    { 
        adj.get(u).add(v); 
        adj.get(v).add(u); 
    } 
    
    static int mod=1000003;
    public static void main(String[] args) throws Exception 
    {   
       
        OutputStream outputStream = System.out;
        PrintWriter w = new PrintWriter(outputStream);
        FastReader sc = new FastReader();
        // Scanner sc = new Scanner(new File("input.txt"));
        // PrintWriter out = new PrintWriter(new File("output.txt"));
          int i,j=-1;
         
           
          
           int n = sc.nextInt();
           int a[] = new int[n+1];

           for(i=1;i<=n;i++) a[i] = sc.nextInt();

           for(i=1;i<=n;i++){
               if(a[a[a[i]]] == i) {j=20; break;}
           }
           
           if(j==20) w.println("YES");
           else     w.println("NO");
            w.close();
           }
           
       }
        
        
    

       




// System.out.println();