A company has n employees numbered from 1 to n. Each employee either has no immediate manager or exactly one immediate manager, who is another employee with a different number. An employee A is said to be the superior of another employee B if at least one of the following is true:

  * Employee A is the immediate manager of employee B
  * Employee B has an immediate manager employee C such that employee A is the superior of employee C. 



The company will not have a managerial cycle. That is, there will not exist an employee who is the superior of his/her own immediate manager.

Today the company is going to arrange a party. This involves dividing all n employees into several groups: every employee must belong to exactly one group. Furthermore, within any single group, there must not be two employees A and B such that A is the superior of B.

What is the minimum number of groups that must be formed?

Input

The first line contains integer n (1 ≤ n ≤ 2000) — the number of employees.

The next n lines contain the integers pi (1 ≤ pi ≤ n or pi = -1). Every pi denotes the immediate manager for the i-th employee. If pi is -1, that means that the i-th employee does not have an immediate manager. 

It is guaranteed, that no employee will be the immediate manager of him/herself (pi ≠ i). Also, there will be no managerial cycles.

Output

Print a single integer denoting the minimum number of groups that will be formed in the party.

Examples

Input

5
-1
1
2
1
-1


Output

3

Note

For the first example, three groups are sufficient, for example: 

  * Employee 1 
  * Employees 2 and 4 
  * Employees 3 and 5 
n = int(input())
employee = []
for i in range(n+1): #persiapan pembuatan tree employee
    employee.append([])
##party = []
##party.append([])
q = [] #inisialisasi queue untuk BFS
NpL = 0 #Node per Level, menandakan setiap level ada berapa banyak Node
for i in range(n):
    p = int(input())
    if p != -1:
        employee[p] += [i+1] #jika Node mempunyai Parent, maka pada array Tree employee ke-Parrent akan ditambahkan Child nya
    else:
        q += [i+1] #jika tidak mempunyai Parent, berarti Node tersebut merupakan Root
        NpL += 1 #menandakan Node pada level pertama (Root) bertambah 1
level = 1 #inisialisasi level
Next = 0 #untuk menampung berapa Node pada level selanjutnya
##print(party)
##while len(q) > 0:
##    if len(employee[q[0]]) != 0:
##        index = -1
##        for i in range(len(party)):
####            print(i)
##            for j in range(len(party[i])):
##                if party[i][j] == employee[q[0]][0]:
##                    index = i
##                    break
##            if index != -1:
##                break
##        if index == len(party) - 1:
##            party.append([])
####        print(index, len(party))
##        party[index + 1] += [q[0]]
##    q.pop(0)
##print(q)
#Proses BFS
while len(q) > 0:
##    print("q[0] =", q[0], "len =", len(employee[q[0]]), "NPL =", NpL, "Next =", Next, "Level =", level)
    for i in range(len(employee[q[0]])): #jika Node mempunyai Child, maka queue akan ditambahkan dengan Child dari Node tersebut
        q += [employee[q[0]][i]] #penambahan queue
        Next += 1 #menandakan Node pada level selanjutnya bertambah 1, untuk menghitung keseluruhan Node pada level selanjutnya
    q.pop(0) #pop data pertama sesuai aturan queue
    NpL -= 1 #menandakan Node pada level tersebut sudah ditelusuri 1x
    if NpL == 0: #jika semua Node pada level tersebut sudah ditelusuri semuanya
        NpL = Next #penukaran NpL dengan Next, karena Next menampung berapa Node pada level selanjutnya
        Next = 0 #reset Next
        level += 1 #menandakan Level telah berpindah ke Level selanjutnya

print(level - 1) #dikurangi 1 karena Level akan selalu lebih banyak 1 setelah keluar dari perulangan
##input()