3
2 1 1
 6
6 2 6 2 4 2
 2
1 2
 8
2 1 2 2 6 5 6 6
 18
2 3 4 5 2 7 8 9 10 7 11 12 14 15 13 17 18 18
 7
1 2 3 4 5 6 7
 7
4 3 2 6 3 5 2
 7
7 5 3 1 2 1 5
 7
1 6 4 4 5 6 7

1
2 2 1  0
6 2 6 2 4 2  1 
1 1 
 2 
2 2 2 2 6 2 6 6 
 5 
2 3 4 5 11 7 8 9 10 11 11 11 14 15 11 17 18 11 
 6 
1 1 1 1 1 1 1 
 1
4 3 3 6 3 5 2  1
7 5 3 1 3 1 5  4 
1 6 4 1 1 1 1 

#include <bits/stdc++.h>
using namespace std;
#define int long long int
#define pb push_back
#define mp make_pair
#define ld long double
#define MOD 1000000007
int arr[200001];
vector <int> vec;
int vis[200001];
set <int> abhi,s;
int idx=0;
main()
{
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	int n;
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		cin>>arr[i];
	}
	for(int i=1;i<=n;i++)
	{
		s.clear();
		if(vis[i]!=0)
			continue;
		int x=i;
		int v=x;
		while(x!=arr[x])
		{
			s.insert(x);
			vis[x]=i;
			x=arr[x];
			if(s.find(x)!=s.end())
			{
				abhi.insert(x);
				break;
			}
		}
		if(x==arr[x])
			abhi.insert(x);
	}
	for(auto it=abhi.begin();it!=abhi.end();it++)
		vec.pb(*it);
	// for(int i=0;i<vec.size();i++)
	// 	cout<<vec[i]<<" ";
	// cout<<endl;
	if(vec.size()==1)
		cout<<"0\n";
	else
	{
		cout<<vec.size()-1<<"\n";
		for(int i=1;i<vec.size();i++)
			if(arr[vec[i-1]]!=vec[i])
				arr[vec[i-1]]=vec[i];
			else
				arr[vec[i]]=vec[i];
	}
	for(int i=1;i<=n;i++)
		cout<<arr[i]<<" ";
	return 0;
}