#include <stdio.h>
#include <assert.h>
#define TRUE 1
#define FALSE 0
#define MAX 10
void LeMatriz( int Mat[][MAX], int m, int n ) {
int i,j;
for ( i = 0; i < m; i++)
for ( j = 0; j < n; j++)
scanf("%d", &Mat[i][j]);
return;
}
/* Devolve TRUE sss V ( tamanho n) eh permutacao de 1,2,...,n. */
int EhPermutacao( int V[MAX], int n) {
int i, j, contraexemplo;
int k[MAX]; /* vetor de contadores k[i] contar frequencia de i+1 */
/* zero os contadores */
for ( i = 0; i < n; i++ )
k[i] = 0;
/* soma 1 ao contador relativo a cada elemento do vetor V */
for ( i = 0; i < n; i++ )
k[ V[i]-1 ]++;
/* verifica se vetor de contadores é todo ele unitário */
contraexemplo = FALSE;
for (i = 1; i <= n; i++) {
if ( k[i-1] != 1)
contraexemplo = TRUE; /* i nao estah em V */
}
return ! contraexemplo;
}
int main()
{
int A[MAX][MAX], v[MAX];
int n;
int i, j;
int acheinaopermutacao;
scanf("%d", &n);
assert( n <= MAX );
LeMatriz( A, n, n );
acheinaopermutacao = FALSE;
for (i = 0; i < n; i++) {
/* testar coluna i */
for (j = 0; j < n; j++)
v[j] = A[j][i];
if ( !EhPermutacao( v, n) ) /* EhPermutacao( A[i], n) == FALSE */
acheinaopermutacao = TRUE;
/*testar linha i */
if ( !EhPermutacao( A[i], n) ) /* EhPermutacao( A[i], n) == FALSE */
acheinaopermutacao = TRUE;
}
if (acheinaopermutacao == TRUE)
printf("A matriz NAO eh um quadrado latino.\n");
else
printf("A matriz eh um quadrado latino.\n");
return 0;
}