In the cutting stock problem (CSP), we are given m item types, each having an integer weight w_j and an integer demand d_j (j = 1, ..., m), and an unlimited number of identical bins (frequently called rolls in the literature) of integer capacity c. The objective is to produce d_j copies of each item type j using the minimum number of bins so that the total weight packed in any bin does not exceed its capacity.
The task is to implement the function *solve_cutting_stock_problem* in the file *cutting_stock.py* which is expected to find an optimal solution to a given instance of CSP. Note that your program has to find an optimal solution for any CSP instance assuming sufficient amount of memory and time is provided. In you program, explain your algorithm.