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<iostream>
#include<fstream>
#include<sstream>
#include<algorithm>
#include<cstdio>
#include<cassert>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<string>
#include<deque>
#include<queue>
#include<vector>
#include<list>
#include<map>
#include<set>
#include<bitset>
#include<stack>
#include<iomanip>
#include<utility>
#include<functional>
using namespace std;
int n,ans;
int a[200005];
int par[200005]; 
int rank[200005];
int find(int x)
{
	if(par[x]==x)
		return x;
	else
		return par[x]=find(par[x]);
}
void unite(int x,int y)
{
	x=find(x);
	y=find(y);
	if(x==y)
	{
		ans++;
		if(ans!=1&&x!=0)
			a[x]=a[x-1];
		else if(ans!=1)
			a[x]=a[x+1];
		return;
	}
	par[y]=x;
	if(rank[x]==rank[y])
		rank[x]++;
}
int main()
{
	cin>>n;
	for(int i=0;i<n;i++)
		par[i]=i;
	for(int i=0;i<n;i++)
	{
		cin>>a[i];
		a[i]--;
		unite(a[i],i);
	}
	cout<<ans-1<<endl;
	for(int i=0;i<n;i++)
		cout<<a[i]+1<<" ";
	return 0;
}
