procedure tabwords()
   wchar := &lcase ++ &ucase ++ '\'-'
   words := table(0)
   while line := read() do {
      i := 1
      while j := upto(wchar,line,i) do {
         i := many(wchar,line,j)
         words[line[i:j]] +:= 1	# increment count
         }
      }
   return words
end

procedure main()
   wlist := sort(tabwords())	# get sorted list
   i := 0
   while pair := wlist[i +:= 1] do
      write(left(pair[1],12),right(pair[2],3))
end
