/****************************************************************************/
/* Torneos Round-Robin.                                                     */
/*                                                                          */
/* Se enfrentan n equipos entre si, deben jugar todos contra todos.         */
/* Solo es posible si n es par, así que en el caso impar se introduce       */
/* un equipo ficticio de modo que el que debería jugar con el, descansa     */
/* esa ronda.                                                               */
/* En la ronda k el equipo i<n jugará con el j<n si i+j = k mod n donde     */
/* j es distinto de i. Cuando i=j, es decir que 2i = k mod n, el equipo i   */
/* juega contra el n.                                                       */
/*                                                                          */
/* Ref: Rosen, Elementary number theory and its applications.               */
/*                                                                          */
/* Jaime Suarez <mcripto@bigfoot.com> 2003                                  */
/* en http://elparaiso.mat.uned.es                                            */
/****************************************************************************/

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

void uso(void);

int main(int argc, char *argv[])
{
	unsigned int n,i,j,tmp, ronda, N;

	if (argc<2) { uso(); return 1; }
	n=atoi(argv[1]);
	if (n>=17 || n<2) { uso(); return 1; }
	if (n & 1) N=n+1;
	else       N=n;
	
	printf(" Equipo -->");
	for (i=1; i<=n; i++) printf(" %2d ",i);
	printf("\n");
	for (ronda=1; ronda<N; ronda++) {
		printf(" Ronda %2d: ",ronda);
		for (i=1; i<N; i++) {
			for (j=1; j<N; j++) {
				if ( (i+j)%(N-1)== ronda%(N-1)) break;
			}
			if (j==i && N!=n) 	 printf("  - "); 
			else if (j==i && N==n)	{printf(" %2d ",n); tmp=i;}
			else printf(" %2d ",j);
		}
		if (N==n) printf(" %2d ",tmp);
		printf("\n");
	}
	return 0;
}

void uso(void)
{
	
	printf("Uso: rndrobin <n>\n");
	printf("Calcula las rondas para un torneo con n (1<n<17) equipos.\n");
	return ;
}