Word-search algorithms: part 1, signatures and hashing