   program heap_sort
      implicit none
      integer::n
      character(10),allocatable::s(:)
      integer::i,count

         read *, n
         allocate(s(n))
         do i=1,n
            read *,s(i)
         end do

         call heapsort(n,s)

         count=1
         do i=1,n-1
            if (s(i)/=s(i+1)) count=count+1
         end do

         print *,count
         stop

   contains
      subroutine heapsort(n,array)
         implicit none
         integer,intent(in)::n
         character(10),intent(inout)::array(1:n)
         integer::i,j,k,l
         character(10)::w

!            if(n.le.0)then
!               write(6,*)"Error, at heapsort"; stop
!            endif
            if(n.eq.1)return

            l=n/2+1
            k=n
            do while(k.ne.1)
               if(l.gt.1)then
                  l=l-1
                  w=array(l)
               else
                  w=array(k)
                  array(k)=array(1)
                  k=k-1
                 if(k.eq.1) then
                    array(1)=w
                    exit
                 end if
               end if
               i=l
               j=l+l
               do while(j.le.k)
                  if(j.lt.k)then
                     if(array(j).lt.array(j+1))j=j+1
                  end if
                  if (w.lt.array(j))then
                     array(i)=array(j)
                     i=j
                     j=j+j
                  else
                     j=k+1
                  end if
               end do
               array(i)=w
            end do

            return
      end subroutine heapsort

   end program heap_sort