#include <bits/stdc++.h>
using namespace std;
#define int long long
int n,k;
int pw(int a, int b, int mod){
	int ret = 1;
	while(b){
		if(b%2){
			ret = ret*a%mod;
		}
		a = a*a%mod;
		b>>=1;
	}
	return ret;
}
signed main() {
	cin>>n>>k;
	// cout<<pw(2,0,100);
	vector<int> nxt(n),p(n),pos(n);
	for(auto &i: p){
		 cin>>i;
		 i--;
	}
	
	for(int i = 0;i<n;i++){
		nxt[i] = p[i];
		pos[p[i]] = i;
	}
	vector<int> ans(n);
	vector<bool> used(n,false);
	for(int i = 0;i<n;i++){
		vector<int> tmp;
		int node = i;
		while(!used[node]){
			used[node] = true;
			tmp.push_back(node);
			node = nxt[node];
		}
		if(tmp.size() == 0) continue;
		for(auto m: tmp) cout<<m<<" ";
		cout<<endl;
		int sz = tmp.size();
		int shift = pw(2LL,k,sz);
		for(int j = 0;j<tmp.size();j++){
			int position = pos[tmp[(j+shift)%(int)tmp.size()]];
			ans[position] = tmp[j];
		}
		
	}
	for(int i = 0;i<n;i++){
		cout<<i+1<<": "<<ans[i]+1<<" "<<endl;
	}
	// for(auto i: ans) cout<<i+1<<" ";
	
	
	// your code goes here
	return 0;
}