        # C code:
        #
        # char* str
        # if (x < 11) {
        #   if (x > 5) {
        #     str = "(5, 11)\n"
        #   } else if (x == 0) {
        #     str = "0\n"
        #   } else {
        #     str = "< 11\n"
        #   }
        # } else {
        #   str = "x >= 11\n"
        # }
        # print(str)

        .data
x_in_5_11:
        .asciiz "(5, 11)\n"
x_is_zero:
        .asciiz "0\n"
x_lt_11:
        .asciiz "< 11\n"
x_ge_11:
        .asciiz "x >= 11\n"

        .text
main:
        # t0: x
        # t1: str

        # initialize our value of x
        li $t0, 11

        # check < 11
        li $t2, 11
        slt $t3, $t0, $t2
        bne $t3, $zero, less_than_11

        # fall through to outer else
        la $t1, x_ge_11
        j main_exit

less_than_11:
        # check if x > 5, or equivalently, 5 < x
        li $t2, 5
        slt $t3, $t2, $t0
        bne $t3, $zero, greater_than_5

        # fall through to else if x == 0
        beq $t0, $zero, equal_zero

        # fall through to nested else
        la $t1, x_lt_11
        j main_exit

greater_than_5:
        la $t1, x_in_5_11
        j main_exit
        
equal_zero:
        la $t1, x_is_zero
        # could jump to main_exit, but this is what we will fall
        # through to anyways

main_exit:      
        # print out the string in $t1
        move $a0, $t1
        li $v0, 4
        syscall

        # exit the program
        li $v0, 10
        syscall
        
        
