Answer
procedure modelist $(a_1, a_2, a_3, ... a_n: $ non-decreasing sequence of integers)
target $:=$ getnum $(a_1, a_2, a_3, ... a_n)$
{This will tell us the number of occurrences that a mode has}
Initialize a set MODES to contain all the modes. It is initially empty
index$:=1$
while index $\le n$
$\space\space\space$ curvalue $:= a_{index}$
$\space\space\space$ number $:= 0$
$\space\space\space$ while $a_{index} $ is equal to curvalue AND index $\le n$
$\space\space\space$$\space\space\space$ number $:= $number + $1$
$\space\space\space$$\space\space\space$ index $:= $ index + $1$
$\space\space\space$ if number $=$ target then add curvalue to MODES
return MODES
procedure getnum($a_1, a_2, a_3, ..., a_n:$ non-decreasing sequence of integers)
count$:=0$
mode$:= -1$
index$:=1$
while index $\le n$
$\space\space\space$ curvalue $:= a_{index}$
$\space\space\space$ number $:= 0$
$\space\space\space$ while $a_{index} $ is equal to curvalue AND index $\le n$
$\space\space\space$$\space\space\space$ number $:= $number + $1$
$\space\space\space$$\space\space\space$ index $:= $ index + $1$
$\space\space\space$ if number $>$ count
$\space\space\space$$\space\space\space$ count = number
$\space\space\space$$\space\space\space$ mode = curvalue
return number
Work Step by Step
This algorithm attempts to find the modes that a specific set has. It does this by getting the number of occurrences of a mode. The algorithm for this is the same as the one used in exercise $29$ but instead of returning the mode, it returns the number of occurrences of the mode.
It then goes over the set again and calculates the occurrences of every value; if the occurrence of some value $\alpha$ is equal to target, then it must be a mode.
It stores those values in a list called MODES and then returns this set.