//Operation of Frequency of Apperance
#include<bits/stdc++.h>
using namespace std;

//変換
vector<int> into(vector<int> s){
  map<int, int> mp;
  for(int i=0; i<s.size(); i++){
    if(mp.find(s[i])==mp.end()){
      mp.insert(map<int, int>::value_type(s[i], 1));
    }
    else{
      mp[s[i]]++;
    }
  }
  vector<int> ret;
  for(int i=0; i<s.size(); i++){
    ret.push_back(mp[s[i]]);
  }
  return ret;
}

//判定
bool judge(vector<int> a, vector<int> b){
  for(int i=0; i<a.size(); i++)
    if(a[i]!=b[i])return false;
  return true;
}

int main(){
  int n;
  while(true){
    vector<int> pre, now;
    cin>>n;
    if(n==0)break;
    for(int i=0; i<n; i++){
      int tmp;
      cin>>tmp;
      pre.push_back(tmp);
    }
    int ans=0;
    now=into(pre);
    while(!judge(pre, now)){
      pre=now;
      now=into(pre);
      ans++;
    }
    cout<<ans<<endl;
    for(int i=0; i<n; i++){
      if(i!=n-1)cout<<now[i]<<' ';
      else cout<<now[i]<<endl;
    }
  }
  return 0;
}