#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int n, k, ans = 0;
vector <int> p(2e4 + 1, 0);
vector <int> d(2e4 + 1, 0);
vector <int> mxd(2e4 + 1, 0);
vector <vector <int>> g(2e4 + 1);
vector <pair <int, int>> l;
void atrendez(int x) {
mxd[x] = d[x];
int mxi = 0;
for (int i : g[x]) {
d[i] = d[x] + 1;
atrendez(i);
mxd[x] = max(mxd[x], mxd[i]);
if (mxd[i] > mxd[mxi]) { p[mxi] = 1; mxi = i; }
else p[i] = 1;
}
}
void level(int x) {
if (!g[x].size()) l.push_back({ -d[x],x });
for (int i : g[x]) {
d[i] = d[x] + 1;
level(i);
}
}
int main()
{
cin >> n >> k;
for (int i = 1; i <= n; i++) {
cin >> p[i];
g[p[i]].push_back(i);
}
atrendez(1);
for (int i = 1; i <= n; i++) g[i].resize(0);
for (int i = 1; i <= n; i++) g[p[i]].push_back(i);
level(1);
for (int i = 1; i <= n; i++) if (g[i].size() && l.size() < k) l.push_back({ 0,i });
sort(l.begin(), l.end());
for (int i = 0; i < k; i++) ans -= l[i].first;
cout << ans << endl;
for (int i = 0; i < k; i++) cout << l[i].second << " ";
}