#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<algorithm>
#include<string.h>
#include<set>
#include<vector>
#include<queue>
using namespace std;
int b[2000],c[2000],s[2000],ss=0;
int main() {
int n, i, countt=0;
scanf("%d", &n);
for (i = 1;i <= n;i++) {
scanf("%d", &b[i]);
}
for (i = 1;i <= n;i++) {
if (c[i] == 1) continue;
int ii = i,cnt=0;
while (c[ii] == 0) {
cnt++;
c[ii] = 1;
ii = b[ii];
}
if (cnt >= 2) countt++;
}
if (countt == 0) { printf("0"); return 0; }
if (countt == 1) {
printf("1\n");
for (i = 1;i <= n;i++) {
if (i == b[i]) continue;
int ii = i,cnt=0;
while (1) {
cnt++;
ii = b[ii];
if (ii == i) break;
}
printf("%d: ", cnt);
ii = i;
while (1) {
printf("%d ", ii);
ii = b[ii];
if (ii == i) break;
}
return 0;
}
}
for (i = 1;i <= n;i++) c[i] = 0;
printf("2\n");
for (i = 1;i <= n;i++) {
if (c[i] == 1) continue;
c[i] = 1;
int ii = i;
if (i == b[i]) continue;
ss++;
s[ss] = i;
while (1) {
c[ii] = 1;
ii = b[ii];
if (ii == i) break;
}
}
printf("%d: ", ss);
int start = b[s[ss]];
for (i = 1;i <= ss;i++) {
printf("%d ", s[i]);
int tmp = b[s[i]];
b[s[i]] = start;
start = tmp;
}
printf("\n");
for (i = 1;i <= n;i++) {
if (i == b[i]) continue;
int ii = i, cnt = 0;
while (1) {
cnt++;
ii = b[ii];
if (ii == i) break;
}
printf("%d: ", cnt);
ii = i;
while (1) {
printf("%d ", ii);
ii = b[ii];
if (ii == i) break;
}
return 0;
}
return 0;
}