Problem:
Score : 200 points

Problem Statement

Iroha has a sequence of N strings S_1, S_2, ..., S_N. The length of each string is L.

She will concatenate all of the strings in some order, to produce a long string.

Among all strings that she can produce in this way, find the lexicographically smallest one.

Here, a string s=s_1s_2s_3...s_n is lexicographically smaller than another string t=t_1t_2t_3...t_m if and only if one of the following holds:

There exists an index i(1≦i≦min(n,m)), such that s_j = t_j for all indices j(1≦j<i), and s_i<t_i.

s_i = t_i for all integers i(1≦i≦min(n,m)), and n<m.

Constraints

1 ≦ N, L ≦ 100

For each i, the length of S_i equals L.

For each i, S_i consists of lowercase letters.

Input

The input is given from Standard Input in the following format:

N L
S_1
S_2
:
S_N

Output

Print the lexicographically smallest string that Iroha can produce.

Sample Input 1

3 3
dxx
axx
cxx

Sample Output 1

axxcxxdxx

The following order should be used: axx, cxx, dxx.

Solution in Fortran (gfortran v4.8.4) (judge verdict: Runtime Error)

module ch
  implicit none
  type char
     character(100)      :: chara
  end type char
  type(char),allocatable :: namec(:)
end module ch
program main
   
  use ch, only : namec 

  implicit none
  integer :: n, l
  character(100) :: ans
  integer, allocatable :: s(:)
  integer :: i,j,k
  
  read(*,*) n, l

  allocate( s(n) )
  allocate( namec(n) )

  do i = 1, n
    read(*,*) namec(i)%chara
  end do

  call quicksort1( 1, n ) 
  
  j = 1
  do i = 1, n
    ans(j:j+l) = trim( namec(i)%chara )
    j = j + l 
  end do
  ans = ans(1:j)
  print*,ans

end program main
recursive subroutine quicksort1( first, last )
!recursive subroutine quicksort1( a%chara, first, last )

  use ch, only : namec 

  implicit none
  integer,intent(in)::first,last
  !type char
  !   character(100) :: chara 
  !end type 
  !type(char),intent(inout)::a(*)
  !
  ! Original
  ! https://gist.github.com/t-nissie/479f0f16966925fa29ea
  !
  character(100)::x,t
  integer::i,j

  x = namec((first+last)/2)%chara
  !x = a((first+last)/2)%chara
  i = first
  j = last
  do
     do while ( LGT( x, namec(i)%chara ) )
     !do while ( LGT( x, a(i)%chara ) )
        i=i+1
     end do
     do while ( LGT( namec(j)%chara, x ) )
     !do while ( LGT( a(j)%chara, x ) )
        j=j-1
     end do
     if (i >= j) exit
     t = namec(i)%chara
     namec(i)%chara = namec(j)%chara
     namec(j)%chara = t
     i=i+1
     j=j-1
  end do
  if (first < i-1) call quicksort1( first, i-1  )
  if (j+1 < last)  call quicksort1( j+1  , last )

  return

end subroutine quicksort1

!recursive subroutine quicksort1(a, first, last )
!  implicit none
!  integer,intent(inout)::a(*)
!  integer,intent(in)::first,last
!  !
!  ! Original
!  ! https://gist.github.com/t-nissie/479f0f16966925fa29ea
!  !
!  integer::x,t
!  integer::i,j
!
!  x = a((first+last)/2)
!  i = first
!  j = last
!  do
!     do while (a(i) < x)
!        i=i+1
!     end do
!     do while (x < a(j))
!        j=j-1
!     end do
!     if (i >= j) exit
!     t = a(i)
!     a(i) = a(j)
!     a(j) = t
!     i=i+1
!     j=j-1
!  end do
!  if (first < i-1) call quicksort1(a, first, i-1)
!  if (j+1 < last)  call quicksort1(a, j+1, last)
!
!  return
!end subroutine quicksort1