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 
from sys import stdin, stdout
import sys
cin = stdin.readline
cout = stdout.write
mp = lambda:list(map(int, cin().split()))
sys.setrecursionlimit(10**9)
'''      
def bfs(y):
	#count = 0
	#cat =  [-1] * n
	#cat[0] = a[0]
	qu = [y]
	
	while len(qu) > 0:
		x = qu[0]
		f = 1
		for p in v[x]:
			if cat[p] == -1:
				f = 0
				if cat[x]+a[p] <= m:
					cat[p] = (cat[x] + 1) * a[p]
					qu.append(p)
		count += f > 0
		qu.pop(0)
	#print(cat)
	return count
'''	

def getLevel(y):
	if level[y]:
		return level[y]
	elif not l[y]: return 1
	else:
		level[y] = getLevel(l[y]) + 1
		return level[y]
		
		
n, = mp()
l = [0]*(n+1)

for i in range(1, n+1):
	x, = mp()
	if x == -1:
		continue
	else:
		l[i] = x
		
level = [0] * (n+1)
for i in range(1, n+1):
	if not l[i]:
		level[i] = 1
	elif not level[i]:
		level[i] = getLevel(l[i]) + 1


cout(str(max(level)))
		
'''		
visited = [0] * (n+1)
level = [1]*(n+1)

for i in range(1, n+1):
	if not visited[i]:
		bfs(i)
'''