public List<String> analyzeNumber( String sLine )
    {
        String sCleanNumber = cleanNumber( sLine );
        List<String> oResult = new ArrayList<String>( );
        List<String> oChildResult = null;
        List<String> oWordList;
        String sTemp;
        String sRemaining;
        String sResult;
        String sAppend;
        
        try
        {
            // Attempt to parse the number.
            new BigInteger( sCleanNumber );
        }
        catch ( NumberFormatException e )
        {
            // Unable to parse! Invalid number. Clear the string to avoid processing.
            sCleanNumber = CommonConstants.STR_EMPTY;
        }

        for ( int nBegin = 0; nBegin < sCleanNumber.length( ) - 1; nBegin++ )
        {
            if ( nBegin == 1 )
            {
                sAppend = String.valueOf( sCleanNumber.charAt( 0 ) ) + CommonConstants.STR_DASH;
            }
            else if ( nBegin > 1 )
            {
                // No two consecutive digits should remain unchanged.
                break;
            }
            else
            {
                sAppend = CommonConstants.STR_EMPTY;
            }
                
            oWordList = null;
            sTemp = null;
            sRemaining = null;
            sResult = null;

            for ( int nEnd = nBegin + 1; nEnd <= sCleanNumber.length( ); nEnd++ )
            {
                sTemp = sCleanNumber.substring( nBegin, nEnd );
                oWordList = coDictionary.get( sTemp );

                if ( oWordList.isEmpty( ) )
                {
                    continue;
                }
                else
                {
                    if ( nEnd != sCleanNumber.length( ) )
                    {
                        // Not yet at its end.
                        // Analyze the rest of the numbers.
                        sRemaining = sCleanNumber.substring( nEnd );
                        oChildResult = analyzeNumber( sRemaining );

                        if ( !oChildResult.isEmpty( ) )
                        {
                            for ( String sWord : oWordList )
                            {
                                // Loop through the word list result.
                                for ( String sChild : oChildResult )
                                {
                                    // Loop through the child results.
                                    sResult = sAppend + sWord + CommonConstants.STR_DASH + sChild;

                                    oResult.add( sResult );
                                }
                            }
                        }
                        else if ( sRemaining.length( ) == 1 )
                        {
                            for ( String sWord : oWordList )
                            {
                                // Loop through the word list and append the
                                // single number.
                                sResult = sAppend + sWord + CommonConstants.STR_DASH + sRemaining;

                                oResult.add( sResult );
                            }
                        }
                    }
                    else
                    {
                        // Reached the end of the number sequence.
                        for ( String sWord : oWordList )
                        {
                            // Loop through the word list.
                            oResult.add( sAppend + sWord );
                        }
                    }
                }
            }
        }

        return oResult;
    }