/**Implementiert ein double Hashing
 * die Größe des Hashfeldes ist 7
 * die Schrittweite ist maximal 5*/

#include <stdlib.h>
#include <stdio.h>



int h1 (int k)
{
	return k % 7;
}

int h2 (int k)
{
	return (k % 5) + 1;
}

int hash [7];

void einfuegen (int k)
{
	int i;
	int kol;
	
	/**direktes einfügen möglich?*/
	if (! hash [h1(k)])
	{
		hash [h1(k)] = k;
		return;
	} else {
		/**Verbesserung nach Brent*/
		kol = hash[h1(k)];
		if (! hash[h1(k) + h2(kol) % 7])
		{
			hash [h1(k) + h2(kol) % 7] = kol;
			hash [h1(k)] = k;
			return;
		}

		i=h1(k);
		do
		{			
			i = (i+h2(k)) % 7;
			if (! hash[i])
			{
				hash[i] = k;
				return;
			}
		} while (i!=h1(k));
		/**Einfügen nicht möglich, Hash voll!*/
		exit (1);
	}
}

void print_hash ()
{
	int i;

	for (i=0; i<7;i++)
	{
		printf ("%2d ",hash[i]);
	}
	printf ("\n");
}

int main ()
{
	int i;
	int num;
	
	for (i=0; i< 7; i++)
	{
		scanf ("%d", &num);
		einfuegen (num);
		print_hash();
	}
	return 0;
}


