#Block 1
#constant time.
def f_1(string):
    string = "Hello World" + string
    print string
    
#Block 2
#constant time.
def f_2(L):
    print L[0]
    for i in range(100):
        print L[0] + 1

#Block 3
#linear time.
def f_3(L):
    print L[0]
    for i in range(len(L)):
        print L[i] + 1

#Block 4
#quadratic time.
def f_4(L):
    print L[0]
    for i in range(len(L)):
        for j in range(len(L)):
            print L[i]*L[j]

#Block 5
#quadratic time, because of the worst case.
def f_5(L, b):
    print L[0]
    for i in range(len(L)):
        if b:
            for j in range(len(L)):
                print L[i]*L[j]

#Block 6
#Linear time, because we never enter into the second loop.
def f_6(L, b):
    b = False
    print L[0]
    for i in range(len(L)):
        if b:
            for j in range(len(L)):
                print L[i]*L[j]

#Block 7:
#Sub-linear time. In this case logarithmic.
def f_7(n):
    while n>0:
        n = n/2
        
#Block 8:
#More than quadratic, in this case exponential.
def f_8(L):
    for i in range(len(L)):
        L[i] = False
        
    cur_ind = 0
    max_ind = 0
    while cur_ind < len(L):
        linear_function(L)
        if L[cur_ind]:
            new_ind=0
            while L[new_ind] and new_ind < len(L):
                new_ind = new_ind + 1
            for i in range(cur_ind):
                L[i] = False
            cur_ind = new_ind
            L[cur_ind= True
        else:
            L[cur_ind]= True
    