human
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  ... What is a Python code to print a single integer denoting the minimum number of groups that will be formed in the party?
assistant
#Here is Python code to print a single integer denoting the minimum number of groups that will be formed in the party.
collections import defaultdict

# def parse_input():
#   n = int(input())
#   graph = defaultdict(list)
#   for i in range(1, n+1):
#     p = int(input())
#     if p == -1: continue
#     graph[i].append(p)
#     graph[p].append(i)
#   print(graph)
#   return n, graph

# def solve(num_employees, forest):
#   NOTVISITED = 0
#   VISITED = 1
#   TAKEN = 2
#   visited = [NOTVISITED for i in range(num_employees + 1)]
#   ans = 0
#   groups = []
#   def dfs(u):
#     visited[u] = VISITED
#     for v in forest[u]:
#       if visited[v] == NOTVISITED:
#         dfs(v)
#   for i in range(1, num_employees + 1):
#     if visited[i] == TAKEN or visited[i] == VISITED: continue
#     dfs(i)
#     eligible = [i for i in range(1, num_employees + 1) if visited[i] == NOTVISITED]
#     eligible = eligible[:1]
#     if eligible:
#       dfs(eligible[0])
#       possibly_eligible = [i for i in range(1, num_employees + 1) if visited[i] == NOTVISITED]
#       eligible += possibly_eligible
#     eligible.append(i)
#     if not eligible: break
#     ans += 1
#     groups.append(eligible)
#     for u in eligible:
#       visited[u] = TAKEN
#     for i in range(1, num_employees + 1):
#       if visited[i] == VISITED:
#         visited[i] = NOTVISITED
#   print(groups)
#   return ans

def parse_input():
  n = int(input())
  p = [-1 for i in range(n + 1)]
  for i in range(1, n+1):
    pi = int(input())
    p[i] = pi
  #print(p)
  return n, p

def main():
  num_employees, parent = parse_input()
  ans = 0
  for i in range(1, num_employees + 1):
    cur = i
    d = 0
    while cur != -1:
      d += 1
      cur = parent[cur]
    ans = max(ans, d)
  print(ans)
main()