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 

//8 - 1
//T = 26
//1538
#include <bits/stdc++.h>
using namespace std;
#define int long long int
#define pb push_back
#define mp make_pair
#define MIN -100000000000
#define MAX 100000000000
vector <int> g[200001];
bool vis[200001];
vector <int> vec;
int dsu[200001],size[200001];
void dfs(int node)
{
    vis[node]=true;
    for(int i=0;i<g[node].size();i++)
    {
        if(vis[g[node][i]]==false)
        {
            dfs(g[node][i]);
        }
    }
}
int root(int i)
{
    while(dsu[i]!=i)
    {
        dsu[i]=dsu[dsu[i]];
        i=dsu[i];
    }
    return i;
}
void uni(int a, int b)
{
    int ra=root(a);
    int rb=root(b);
    if(size[ra]<size[rb])
    {
        dsu[ra]=dsu[rb];
        size[rb]+=size[ra];
    }
    else
    {
        dsu[rb]=dsu[ra];
        size[ra]+=size[rb];
    }
}
main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    int n;
    cin>>n;
    int cnt=0;
    int papa[n+1];
    for(int i=1;i<=n;i++)
        cin>>papa[i];
    bool ok=false;
    int rt=-1;
    for(int i=1;i<=n;i++)
    {
        if(papa[i]==i)
        {
            rt=i;
            ok=true;
            break;
        }
    }
    for(int i=0;i<200001;i++)
    {
        dsu[i]=i;
        size[i]=1;
    }
    for(int i=1;i<=n;i++)
    {
        int u=i;
        int v=papa[i];
        if(u==v)
            continue;
        int ru=root(u);
        int rv=root(v);
        if(ru!=rv)
        {
            uni(u,v);
            continue;
        }
        if(rt!=-1)
            papa[i]=rt;
        else
            papa[i]=i;
        cnt++;
    }
    for(int i=1;i<=n;i++)
    {
        int u=i;
        int v=papa[i];
        if(u==v)
            continue;
        g[u].pb(v);
        g[v].pb(u);
    }
    for(int i=1;i<=n;i++)
    {
        if(vis[i]==true)
            continue;
        vec.pb(i);
        dfs(i);
    }
    for(int i=1;i<vec.size();i++)
    {
        int q1=vec[i];
        int q2=vec[i-1];
        papa[q1]=q2;
        cnt++;
    }
    cout<<cnt<<"\n";
    for(int i=1;i<=n;i++)
        cout<<papa[i]<<" ";
    cout<<"\n";
    return 0;
}