#define _USE_MATH_DEFINES #include using namespace std; using ul = unsigned long long; using ll = long long; using ld = long double; using pll = pair; #define in(v,c) ((c).find(v) != (c).end()) #define F(i,n) for(ll i = 0; i < (ll)(n); i++) #define Fun(i,n) for(ul i = 0; i < (n); i++) #ifdef GPD templatevoid lerr(F&&f){cerr<(f)<void lerr(F&&f,R&&...r){cerr<(f)<<' ';lerr(forward(r)...);} #else #define lerr(...) #endif ll n, q; vector> e; vector solve(ll cur, ll parent, ll amount) { if(e[cur].size() == 1 || e[cur].size() == 0 ) return vector(amount, cur); ll sons = e[cur].size() - (parent == -1? 0 : 1); ll q_sons = amount / sons; ll offset = q_sons - amount * sons; vector> sonsCombination; F(i, e[cur].size()) { if(e[cur][i] == parent) continue; ll q_sons_i = q_sons; if(offset) { q_sons_i++; offset--; } sonsCombination.push_back(solve(e[cur][i], cur, q_sons_i)); } vector ret; ll counter = 0; ll idx = 0; while(true) { for(ll i = 0; i < sons; i++) { ret.push_back(sonsCombination[i][idx]); counter++; if(counter >= amount) return ret; } idx++; } return ret; } int main() { cin >> n >> q; e = vector>(n); for(ll i= 1; i < n; i++) { ll p; cin >> p; e[i].push_back(p); e[p].push_back(i); } auto ret = solve(0, -1, q); F(i,ret.size() - 1) cout << ret[i] << endl; cout << ret.back() << endl; return 0; }