program main
    implicit none
    integer(4):: n,i
    integer(8),allocatable:: a(:)
    read*, n
    allocate(a(n))
    read*, a(:)

    call merge_sort(a(:),1,n)

    do i=1,n-1
        if (a(i) == a(i+1)) then
            print*, 'NO'
            stop
        end if
    end do
    print*, 'YES'
    
    
    
    

    contains
    recursive subroutine merge_sort(ar,fst,lst)
        integer(8):: ar(:)
        integer(4)::fst,lst
        integer(4):: tmp, mdl
        if(lst-fst < 2) then
            if (ar(fst) < ar(lst)) then
                tmp = ar(fst)
                ar(fst) = ar(lst)
                ar(lst) = tmp
            end if
            return
        end if
    
        mdl = (fst+lst)/2
        call merge_sort(ar(:), fst, mdl)
        call merge_sort(ar(:), mdl+1, lst)
        call merge(ar(:), fst, mdl, lst)
    
    end subroutine
    
    subroutine merge(ar,fst,mdl,lst)
        integer(8):: ar(:)
        integer(4)::fst,mdl,lst
        integer(4):: l,r,t
        integer(8),pointer:: tmp(:)
    
        allocate(tmp(lst-fst+1))
        l=fst
        r=mdl+1
        t=1
        do while(l <= mdl .and. r <= lst)
            if (ar(l) > ar(r)) then
                tmp(t) = ar(l)
                l=l+1
            else
                tmp(t) = ar(r)
                r=r+1
            end if
            t=t+1
        end do
        
        if (r > lst) then
            tmp(t:) = ar(l:mdl)
        else
            tmp(t:) = ar(r:lst)
        end if
    
        ar(fst:lst) = tmp(:)
        deallocate(tmp)
    end subroutine
end program main