def run(numOfConsumer, conCoeffA, conCoeffB, numOfPro, proCoeffAList,
        proCoeffBList, maxSlot):
    consumerList = []
    for i in range(numOfConsumer):
        valueDict = {}
        valueDict[1] = randint(10,60)
        valueDict[2] = valueDict[1] + randint(10,60)
        valueDict[3] = valueDict[2] + randint(10,60)
        valueDict[4] = valueDict[3] + randint(10,60)
        valueDict[5] = valueDict[4] + randint(10,60)
        #print(valueDict)
        consumer = Consumer(i, valueDict)
        consumer.set_bidList(conCoeffA, conCoeffB)
        consumerList.append(consumer)
 
    propertyDict = {1:[], 2:[], 3:[], 4:[], 5:[]}
    numOfPro = 20
    for n in range(numOfPro):
        star = randint(1,5)
        if star == 1:
            cost = randint(10,40)
        elif star == 2:
            cost = randint(30,100)
        elif star == 3:
            cost = randint(50,160)
        elif star == 4:
            cost = randint(70, 220)
        elif star == 5:
            cost = randint(90,280)
        #print(cost)
        pro = Property(n, star, cost, randint(1,5))
        pro.set_priceList(proCoeffAList, proCoeffBList, maxSlot)
        propertyDict[star].append(pro)

    priceline = NYOP()
    priceline.compute(consumerList, propertyDict)
    #print("priceline's profit", priceline.profit)

    aveConU = sum(c.utility for c in consumerList)/numOfConsumer
    #print("average consumer utility", aveConU)

    sumProProfit = 0
    for k in propertyDict.keys():
        sumProProfit += sum(p.profit for p in propertyDict[k])
    aveProProfit = sumProProfit/numOfPro
    #print("average property profit", aveProProfit)

    return (priceline.profit, aveConU, aveProProfit)