#include <iostream>
#include <vector>
#include <stack>

int n;

using namespace std;
vector <int> graph[1000006];
int components[1000006];
int no_of_components;
stack <int> mystack;

int main(){

    // Load the graph
    
    cin >> n;
    for (int i=0; i<n; i++){
        int X;
        cin >> X;
        graph[X-1].push_back(i); 
    }
    
    // Display loaded graph 
    cout<<"Graph:"<<endl; 
    for (int i=0; i<n; i++) {
    	cout << "Node "<<i<<" --> ";
    	for (auto &x : graph[i]) 
    	    cout<< x<< " ";
    	cout<<endl;     
    }  
    cout<<endl; 

    // Identify the connectect groups 
    
    for (int i=0; i<n; i++){

        if (components[i]>0) 
            continue;

        no_of_components++;

        mystack.push(i);
        components[i]=no_of_components;

        while (mystack.empty()==false){
            int v;

            v=mystack.top();
            mystack.pop();

            for (int u=0; u<graph[v].size(); u++){
                if (components[graph[v][u]]>0) continue;

                mystack.push(graph[v][u]);
                components[graph[v][u]]=no_of_components;

            }
        }
    }

    // Display resutls
    
    cout << "Number of connected components: "<<no_of_components<<endl;
    for (int i=0;i<n; i++) 
       cout <<"Node "<< i<<" is in component "<<components[i]<<endl;

    return 0;

}