With the explosion of Internet access and commerce over the past
decade, there has been a huge demand for organization domain names.
Several words are often strung together to form a second-level domain
name (the name to the left of the top-level .edu, .com, .org,
¼ domain). Names are limited to 63 characters, and although
hyphens are allowed, most domain name owners avoid them so the names
are shorter and easier to type. However, since domain names are
case-insensitive, alternate readings of such names are sometimes
possible, and there have been occasional cases where an alternate
reading was embarassing for the domain owner. This has happened even
when the name was not initially seen as a word sequence strung
together.
Your team has been commissioned to develop a program that will take
suggested domain names and compare them against the words in a
dictionary. The program is to determine if a domain name can be
split entirely into words that exist in the dictionary, and make
particular note if such a split includes "questionable" words. The
potential domain owner can then decide if (s)he wants to change the
name, perhaps by inserting hyphens at desired points or even
rewording the name entirely. Note that a domain owner is interested in every
possible word split, regardless of whether or not the result makes
sense as a phrase.
Input to your program will be in two sections. The first section
contains the word dictionary, one word per line.
Any word that is considered "questionable"
will be listed with a question mark in the first column. Words that are not
questionable will have a space in the first column.
Each word in the dictionary will
appear in lower case (letters a-z) starting in
the second column. Variations of a word (such
as "run," "runs," and "runner") will be listed separately.
Words will each be unique and will appear in no
particular order. No word is longer than 32 characters. The word
list could contain up to 20,000 words. The dictionary will end with
an empty line.
The remaining input will be a list of proposed second-level domain
names in all lower case, one per line, each starting in the first
column. This list will end with the end-of-file.
For each proposed second-level domain name, your program is to print
a list of all the possible word sequences that make up the domain
name. The proposed name should appear on a line
by itself, starting in the first column, immediately followed by a
colon. The word sequences should appear in alphabetical (ASCII)
order, one per line. If a given word sequence contains a
questionable word, the first column is to contain a question mark; if
no word in the sequence is questionable, the first column is to
contain a space. The word sequence is to be printed starting in the
second column, with hyphens separating the words from each other.
If a given domain name cannot be split into a sequence of dictionary
words, print an exclamation mark in the first column, followed by the
message "No word sequence found." starting in the second column.
No output line is to include trailing whitespace.
Print an empty line after the results for each domain name (including
the last).
Sample Input
word
words
together
and
a
?darn
?swear
strung
the
an
wear
boys
boy
wordsstrungtogether
boyswear
notindictionary
Output for the Sample Input
wordsstrungtogether:
words-strung-together
boyswear:
?boy-swear
boys-wear
notindictionary:
!No word sequence found.
File translated from
TEX
by
TTH,
version 3.77. On 17 Nov 2007, 22:23.