program main
  implicit none
  integer::N,i,j,tmp,winnum,num,minnum
  character::c
  character*6::S(6)
  integer*8,allocatable::games(:,:)
  integer*8,parameter::win=2,lose=0,self=9, none=1
  type game
     integer::a,b
  end type game
  type(game)::yet(10)
  yet(:)%a=0
  yet(:)%b=0

  read *,N
  allocate(games(1:N,1:N))
  read *,S(1:N)(1:N)

  do i=1,N
     games(i,i) = self
     do j=i+1,N
        c = S(i)(j:j)
        if(c.eq.'o') then
           games(i,j) = win
           games(j,i) = lose
        else if(c.eq.'x') then
           games(i,j) = lose
           games(j,i) = win
        else
           games(i,j) = none
           games(j,i) = none
        end if
     end do
  end do
  do j=2, N
     if(games(1,j).eq.none) then
        games(1,j) = win
        games(j,1) = lose
     end if
  end do
  winnum = COUNT(games(1,:).eq.win)
  do i=2, N
     tmp = COUNT(games(i,:).eq.win)
     if(winnum.gt.tmp) then
        do j=3, N
           if(games(i,j).eq.none) then
              games(i,j) = win
              games(j,i) = lose
           end if
        end do
     end if
  end do

  num = 0
  do i=1, N
     do j=i+1, N
        if(games(i,j).eq.none) then
           num = num + 1
           yet(num)%a = i
           yet(num)%b = j
        end if
     end do
  end do

  minnum = N
  do i=0, 2**num-1
     do j=0, num-1
        if(btest(i, j).eqv..true.) then
           games(yet(j)%a,yet(j)%b) = win
           games(yet(j)%b,yet(j)%a) = lose
        end if
     end do
     minnum = MIN(minnum, get_grade())
  end do
  print '(i0)', minnum
contains
  function get_grade() result(w)
    integer::i,j,w
    integer::totalwin(num)
    do i=1,N
       totalwin(i) = COUNT(games(i,:).eq.win)
    end do

    w = COUNT(totalwin(2:N).gt.totalwin(1)) + 1
  end function get_grade
end program main