I've written code in Free Pascal based on a contest problem (The contest insists that I have to write with Pascal). It works like charm, but I think it still need some improvements, from memory usage to runtime. > **Input Format** > > First line is `n` (Number of people in the Yellow Pages) and `q` > (Number of people to search) `{1 <= n <= 10000}` and `{1 <= q <= > 10000}` > > Next `n` lines are Yellow Pages entries, each line is the name and the > phone number, space delimited. The name is uppercase letters with > maximum length of 15, while the length of the phone number is exactly > 7 digits. > > Next `q` lines are the people to search, also in uppercase letters > with maximum length 15. > > **Output Format** > > Output is `q` lines, where each line is the phone number of the people > to search > > **Input Sample** > > 10 5 > AARON 8468431 > BEN 1573457 > GREGORY 1765743 > JACK 3746843 > JILL 1357891 > MICHAEL 1375638 > MONET 1357562 > SHEILA 1378651 > TERRY 8756345 > YIN 1781945 > GREGORY > YIN > AARON > MONET > JACK > > **Output Sample** > > 1765743 > 1781945 > 8468431 > 1357562 > 3746843 **My Code** program YellowPages; type string7 = String[7]; var namearray : Array of shortstring; numberarray, searcharray : Array of string7; input, name, search : shortstring; number : string7; n, q, iter1, iter2 : word; procedure SplitInput(input : shortstring; var name : shortstring; var number : string7); var iter_proc, hitspace : byte; begin hitspace := pos(' ', input); name := ''; number := ''; for iter_proc := 1 to length(input) do begin if iter_proc < hitspace then name := name + input[iter_proc]; if iter_proc > hitspace then number := number + input[iter_proc]; end; end; begin readln(n, q); setlength(namearray, n); setlength(numberarray, n); setlength(searcharray, q); for iter1 := 0 to (n - 1) do begin readln(input); SplitInput(input, name, number); namearray[iter1] := name; numberarray[iter1] := numberarray; end; for iter1 := 0 to (q - 1) do begin readln(search); for iter2 := 0 to (n - 1) do begin if namearray[iter2] = search then break; end; searcharray[iter1] := numberarray[iter2]; end; for iter1 := 0 to (q - 1) do begin writeln(searcharray[iter1]); end; end.