First of all we have to know a few points regarding viable prefix :
a) Viable prefixes w.r.t a string to be parsed are those which appear in the stack during the process of reduction.
b) And secondly this should be a prefix of some right sentential form
STACK INPUT ACTION
$ aacbb Shift
$a acbb Shift
$aa cbb Shift
$aac bb Reduce
$aaS bb Shift
$aaSb b Reduce
$aS b Shift
$aSb $ Reduce
$S $ Accept
Now we write the right sentential forms of the string "aacbb"
S --> aSb --> aaSbb --> aacbb
One can verify that all of the given stack contents are prefix of one of the given 4 right sentential forms of the given string.
Hence the viable prefixes are :
a , aa , aac , aaS , aaSb , aS , aSb , S