   program abc164c
      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 sort_quick(1,n,n,s)
 
         count=1
         do i=1,n-1
            if (s(i)/=s(i+1)) count=count+1
         end do
 
         print *,count
         stop
 
   contains
      recursive subroutine sort_quick(left,right,n,array)
       ! split two group with the medium element as the standard, and sort the array at each section
       ! if want to sort the array of strings, change 'integer' variables to 'character' variables
         implicit none
         integer,intent(in)::n,left,right
         character(10),intent(inout)::array(1:n)
         integer::i,j
         character(10)::s,w
 
            if (left>=right) return  ! sortすべき対象が1要素になったら終了
 
           !第一要素を一時的に軸とし、大小のグループへ分ける
            s=array(left)
            i=left
            j=right+1
 
            do
               i=i+1
               do while (s>array(i))  ! 左から探索しsより小さい要素はスルーする
                  i=i+1
               end do
 
               j=j-1
               do while (s<array(j))  ! 右から探索しsより大きい要素はスルーする
                  j=j-1
               end do
 
               if (i>=j) exit
              ! 左寄りにあるsより大きい要素と、右寄りにあるsより小さい要素を交換
               w=array(i)
               array(i)=array(j)
               array(j)=w
            end do
 
           !軸を正しい位置に入れる
            array(left)=array(j)
            array(j)=s
 
            call sort_quick(left,  j-1,n,array) !左部分再帰
            call sort_quick( j+1,right,n,array) !右部分再帰
 
            return
      end subroutine sort_quick
   end program abc164c