#include using namespace std; typedef long long ll; typedef unsigned long long ull; int countWithZero = 0; struct gate { int id; vector children; int leftmostOpenGate = 0; void incOpened() { if(leftmostOpenGate == 0) countWithZero--; leftmostOpenGate++; leftmostOpenGate %= children.size(); if(leftmostOpenGate == 0) countWithZero++; } }; int drop(vector & gates, int id) { if (gates[id].children.size() == 0) { return id; } int nextId = gates[id].children[gates[id].leftmostOpenGate]; gates[id].incOpened(); return drop(gates, nextId); } int main(void) { ios_base::sync_with_stdio(false); int n, q; cin >> n >> q; vector allGates; allGates.push_back({0, {}, 0}); for(int i = 1; i < n; i++) { allGates.push_back({i, {}, 0}); int pred; cin >> pred; allGates[pred].children.push_back(i); } countWithZero = allGates.size(); vector results; for(int i = 0; i < q; i++) { results.push_back(drop(allGates, 0)); cout << results.back() << endl; if(countWithZero == allGates.size()) { int repeat = i + 1; while( i + repeat < q) { i += repeat; for(int j = 0; j < results.size(); j++) { cout << results[j] << endl; } } } } return 0; }