#include <stdio.h>

#define NMAX 100

#define TRUE 1
#define FALSE 0

int vetor_bom(int v[], int n);
void copie_linha(int v[], int a[][NMAX], int i, int n);
void copie_coluna(int v[], int a[][NMAX], int j, int n);

void leia_matriz(int a[][NMAX], int n);

int main()
{
  int n, a[NMAX][NMAX], tudo_bem = TRUE, i, j, v[NMAX];

  scanf("%d", &n);
  leia_matriz(a, n);

  for (i=0; i<n && tudo_bem; i++) {
    copie_linha(v, a, i, n);
    tudo_bem = vetor_bom(v, n);
  }

  for (j=0; j<n && tudo_bem; j++) {
    copie_coluna(v, a, j, n);
    tudo_bem = vetor_bom(v, n);
  }

  if (tudo_bem)
    printf("Matriz 'e de permutacao.\n");
  else  
    printf("Matriz nao 'e de permutacao.\n");

  return 0;
}

int vetor_bom(int v[], int n)
{
  int i, n_0=0, n_1=0;
  for (i=0; i<n; i++)
    switch (v[i]) {
    case 0: n_0++; break;
    case 1: n_1++; break;
    default: return FALSE;
    }
  return (n_0==n-1)&&(n_1==1);
}
     
void copie_linha(int v[], int a[][NMAX], int i, int n)
{
  int j;
  for (j=0; j<n; j++)
    v[j]=a[i][j];
}

void copie_coluna(int v[], int a[][NMAX], int j, int n)
{
  int i;
  for (i=0; i<n; i++)
    v[i]=a[i][j];
}

void leia_matriz(int a[][NMAX], int n)
{
  int i, j;
  for (i=0; i<n; i++)
    for (j=0; j<n; j++)
      scanf("%d", &a[i][j]);
}
