#include <iostream>
#include <sstream>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <string>
#include <vector>
#include <stack>
#include <queue>
#include <set>
#include <map>
#include <algorithm>
#include <functional>

using namespace std;

typedef long long ll;
typedef unsigned long long ull;

#define REP( i, m, n ) for ( int i = (int)m; i < (int)n; i++ )
#define UREP( i, m, n ) for ( unsigned int i = (unsigned int)m; i < (unsigned int)n; i++ )
#define ITER( c ) __typeof( (c).begin() )
#define IREP( c, it ) for ( ITER(c) it = c.begin(); it != c.end(); ++it )
#define ALL( c ) (c).begin(), (c).end()
#define PB( n ) push_back( n )
#define MP( a, b ) make_pair( a, b )
#define fst first
#define snd second

int main()
{
	while ( true )
	{
		int n;
		cin >> n;

		if ( n == 0 )
		{
			break;
		}

		vector<int> current;

		REP( i, 0, n )
		{
			int in;
			cin >> in;
			current.PB( in );
		}

		int count = 0;
		while ( true )
		{
			vector<int> next;
			map<int,int> dist;

			REP( i, 0, n )
			{
				dist[ current[i] ]++;
			}

			REP( i, 0, n )
			{
				next.PB( dist[ current[i] ] );
			}

			if ( current == next )
			{
				break;
			}
			else
			{
				count++;
				current = next;
			}
		}

		cout << count << endl;
		REP( i, 0, n )
		{
			cout << current[i] << ( i + 1 == n ? '\n' : ' ' );
		}
	}

	return 0;
}