#include using namespace std; #include using namespace atcoder; using ll = long long; using vi = vector; using vvi = vector>; using pii = pair; #define rep(i, n) for (int i = 0; i < (int)(n); ++i) #define repr(i, n) for (int i = (int)(n - 1); i >= 0; --i) int main() { const int INF = 1001001001; int n; cin >> n; vector> g(n, vector(0)); rep(i, n - 1) g[i + 1].emplace_back(i, 0); rep(i, n - 1) { int r; cin >> r; r--; g[i].emplace_back(r, 1); } vi ret(n, INF); deque dq; dq.emplace_back(0, 0); ret[0] = 0; while (dq.size()) { int v, d; tie(v, d) = dq.front(); dq.pop_front(); if (d > ret[v]) continue; for (auto [t, c] : g[v]) { if (d + c < ret[t]) { ret[t] = d + c; if (c == 0) { dq.emplace_front(t, d); } else { dq.emplace_back(t, d + c); } } } } cout << ret[n - 1] << endl; return 0; }