#!/usr/bin/env python
# coding: utf-8

# In[26]:


pageHeight = 28.0


# In[4]:


textHeight = 0.8
textSpaceheight = 0.6
figHeight = 25.2
alpha = 1
beta = 0


# In[2]:


lineList = [('WL', True),
 ('WL', True),
 ('Fig', False),
 ('WL', True),
 ('WL', False),
 ('WL', True),
 ('WL', False),
 ('WL', False),
 ('WL', True),
 ('WL', False),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', False),
 ('WL', True),
 ('WL', False),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', False),
 ('WL', True),
 ('WL', True),
 ('WL', False),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('Fig', False),
 ('WL', True),
 ('WL', False),
 ('WL', True),
 ('Fig', False),
 ('WL', True),
 ('Fig', False),
 ('WL', True),
 ('WL', False),
 ('WL', True),
 ('WL', False),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', False),
 ('WL', True),
 ('WL', False),
 ('WL', True),
 ('Fig', True),
 ('WL', False),
 ('WL', True),
 ('WL', True),
 ('WL', False),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', False),
 ('WL', True),
 ('WL', False),
 ('WL', False),
 ('WL', True),
 ('WL', False),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('Fig', True),
 ('WL', True),
 ('WL', True),
 ('Fig', True),
 ('WL', True),
 ('WL', True),
 ('WL', False),
 ('WL', True),
 ('WL', True),
 ('WL', False),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('Fig', True),
 ('WL', False),
 ('WL', True),
 ('WL', False),
 ('WL', True),
 ('WL', True),
 ('WL', False),
 ('WL', True),
 ('WL', True),
 ('WL', False),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('Fig', False),
 ('WL', True),
 ('WL', False),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('Fig', False),
 ('WL', True),
 ('WL', False),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', False),
 ('WL', True),
 ('WL', False),
 ('WL', True),
 ('WL', True),
 ('WL', False),
 ('WL', True),
 ('WL', True),
 ('WL', False),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', False),
 ('WL', True),
 ('Fig', False),
 ('WL', True),
 ('WL', True),
 ('WL', False),
 ('WL', True),
 ('WL', False),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', False),
 ('WL', True),
 ('WL', True),
 ('WL', False),
 ('WL', True),
 ('WL', True),
 ('WL', False),
 ('WL', True),
 ('WL', True),
 ('WL', False),
 ('WL', False),
 ('WL', True),
 ('WL', False),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', False),
 ('WL', True),
 ('Fig', False),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', False),
 ('WL', True),
 ('WL', False),
 ('WL', True),
 ('WL', True),
 ('WL', False),
 ('Fig', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', False),
 ('WL', True),
 ('WL', False),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('Fig', True),
 ('WL', True),
 ('Fig', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', False),
 ('WL', True),
 ('WL', False),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('Fig', False),
 ('WL', True),
 ('WL', False),
 ('WL', True),
 ('WL', False),
 ('WL', True),
 ('WL', False),
 ('WL', True),
 ('WL', True),
 ('WL', False),
 ('WL', True),
 ('WL', False),
 ('WL', True),
 ('WL', False),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', False),
 ('WL', True),
 ('WL', False),
 ('WL', True),
 ('Fig', True),
 ('Fig', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', False),
 ('WL', True),
 ('WL', False),
 ('WL', True),
 ('WL', False),
 ('WL', True),
 ('WL', True),
 ('WL', False),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', False),
 ('WL', True),
 ('WL', False),
 ('WL', True),
 ('WL', True),
 ('Fig', True),
 ('WL', False),
 ('WL', True),
 ('WL', False),
 ('WL', True),
 ('WL', False),
 ('Fig', True),
 ('WL', True),
 ('WL', True),
 ('WL', False),
 ('WL', True),
 ('WL', False),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('Fig', False),
 ('WL', True),
 ('WL', False),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('Fig', True),
 ('Fig', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('Fig', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', False),
 ('WL', True),
 ('WL', False),
 ('WL', True),
 ('WL', True),
 ('Fig', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('Fig', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', False),
 ('WL', True),
 ('WL', False),
 ('WL', True),
 ('WL', False),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', False),
 ('WL', True),
 ('WL', False),
 ('WL', True),
 ('WL', False),
 ('WL', True),
 ('WL', False),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', False),
 ('WL', True),
 ('WL', False),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('Fig', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('Fig', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', False),
 ('WL', True),
 ('WL', False),
 ('WL', False),
 ('WL', True),
 ('WL', False),
 ('WL', True),
 ('WL', False),
 ('WL', True),
 ('WL', False),
 ('WL', False),
 ('WL', True),
 ('WL', False),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', False),
 ('WL', True),
 ('Fig', False),
 ('WL', True),
 ('WL', True),
 ('WL', False),
 ('WL', True),
 ('WL', True),
 ('WL', False),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('WL', True),
 ('Fig', True),
 ('Fig', True),
 ('WL', True),
 ('WL', True),
 ('WL', True)]


# In[8]:


lineAssignInfo = dict()
figToRefer = {0 : 0}


# In[7]:


n = len(lineList)

figAndRefer = dict()

# In[53]:


def cost(n):
    global pageHeight
    global lineAssignInfo
    global textHeight
    global textSpaceheight
    global alpha
    global beta
    if n == 0:
        lineAssignInfo[n] = 0
        return 1
    min_cost =  float("inf") 
    min_p = -1
    cost(n-1)
    for p in range(n):
        if previousSameItem(n) != -1 and p < lineAssignInfo[previousSameItem(n)]:
            pass #cost = float("inf") 
        else:
            # 對於所有的東西
            
            input_texts_in_p = [k for k, v in lineAssignInfo.items() if v == p]
            words_len_in_p = len(list(filter(
                lambda i : lineList[i][0] == "WL" or lineList[i][0] == "EndOfPara", input_texts_in_p)))
            
            figs_len_in_p = len(list(filter( lambda i : lineList[i][0] == "Fig", input_texts_in_p)))

            input_texts_height_in_p = words_len_in_p * (textHeight + textSpaceheight) \
                                      + figs_len_in_p * (figHeight + textSpaceheight) - textSpaceheight
            if (lineList[n][0] in ["WL", "EndOdPara"]) and input_texts_height_in_p + textSpaceheight + textHeight > pageHeight:
                    pass #cost = float("inf")
            elif lineList[n][0] == "Fig" and input_texts_height_in_p + textSpaceheight + figHeight > pageHeight:
                    pass
            else:
                temp_max_page_no = p#max(p, max(lineAssignInfo.keys()))
                if lineList[n][0] == "Fig":
                    print(f"fig n = {n}") #TMP
                    temp_total_diff = p - figRefererId(n) + sum([k - v for k, v in figToRefer.items()])
                else: 
                    temp_total_diff = sum([k - v for k, v in figToRefer.items()])

                tmp_cost_fun_of_p = temp_max_page_no * beta + temp_total_diff * alpha
                print(f"n=={n}, p={p}, tmpCost = {temp_max_page_no}, {temp_total_diff}, lineAssignInfo = {lineAssignInfo}")
                if min_cost > tmp_cost_fun_of_p:
                    min_cost = tmp_cost_fun_of_p
                    min_p = p
    lineAssignInfo[n] = min_p
    if lineList[n][0] == "Fig":
        figToRefer[min_p] = lineAssignInfo[figRefererId(n)]
    return min
        

def figRefererId(fig_id):
    global figAndRefer
    print(fig_id) #TMP
    referer_id = -1
    for i in list(reversed(range(fig_id))):
        if lineList[i][0] in ["WL", "EndOfPara"]:
            referer_id = i
            break
    figAndRefer[fig_id] = referer_id
    return referer_id

def previousSameItem(n):
    global lineList
    previous_id = -1
    for i in list(reversed(range(n))):
        if lineList[i][0] == lineList[n][0]:
            previous_id = i
            break
    return previous_id      


# In[54]:


cost(100)
print(lineAssignInfo)
print(figToRefer)
print(figAndRefer)