#include <iostream>
#include <cstdio>
#include <string>
#include <sstream>
#include <algorithm>
#include <math.h>
#include <map>
#include <iomanip>
#include <vector>

using namespace std;



int n;
int S[12];
int C[12];
int cnt;	//操作回数
bool first_flag;
map<int, int> hindo;



//numは数列の長さ
void operation(int num)
{
	hindo.clear();
	
	for (int i=0; i<num; i++)
	{
		if (hindo.find(S[i]) == hindo.end())
		{
			//初めての数だった場合
			hindo[S[i]] = 1;
		} else {
			hindo[S[i]]++;
		}
	}
	
	for (int i=0; i<num; i++)
	{
		C[i] = hindo[S[i]];
	}
}



//numは数列の長さ
bool check_same_array(int num)
{
	bool flag = true;
	
	for (int i=0; i<num; i++)
	{
		if (S[i] != C[i])
		{
			flag = false;
			break;
		}
	}
	
	return flag;
}



void replace_array(int num)
{
	for (int i=0; i<num; i++)
	{
		S[i] = C[i];
	}
}



int main()
{
	while (cin >> n)
	{
		if (n == 0) break;
		
		for (int i=0; i<n; i++)
		{
			cin >> S[i];
		}
		
		cnt = 0;
		while (1)
		{
			operation(n);
			cnt++;
			if (check_same_array(n))
			{
				//数列が同じだった場合
				cout << cnt - 1 << endl;
				first_flag = true;
				for (int i=0; i<n; i++)
				{
					if (first_flag)
					{
						cout << C[i];
						first_flag = false;
					} else {
						cout << " " << C[i];
					}
				}
				cout << endl;
				break;
			} else {
				replace_array(n);
			}
		}
		
		/*
		for (int i=0; i<n; i++)
		{
			cout << C[i] << " ";
		}
		*/
	}
	
	return 0;
}