Generate a python program that has the following intention:

The intention of the program is to find the shortest path between a specified start node and a specified destination node in a grid-like structure using the Fibonacci heap data structure. The program uses the following functions:

shortest_path_length(line_length, start, destination): This function takes three arguments - line_length, start, and destination. line_length is a 2D list representing the grid with the values representing the distance between two nodes. The start and destination are the starting and ending nodes respectively. The function returns the shortest path length between the start and destination nodes.
get(unknown_points, target_node): This function takes two arguments - unknown_points and target_node. It returns the distance between the start node and the target node in the unknown_points list, which contains tuples of the form (node, distance).
insert_or_update(node_pile, target_node): This function takes two arguments - node_pile and target_node. It checks if the target node already exists in the node_pile list and if it does, updates the distance. Otherwise, it inserts the target node in the list.
The program uses a Fibonacci heap data structure to keep track of the nodes and their distances in a min-heap fashion. The program starts by adding the start node and its distance of 0 to the unknown_points list. Then, it iterates through the unknown_points list, popping the node with the minimum distance and updating the distance of its successors. If a successor is already in the known_points set, it skips it. If not, it updates the unknown_points list with the new distance. This process continues until the destination node is reached, and the shortest path length is returned. If the destination node is not found, the function returns float('inf'). Write your response with exactly 3 paragraphs, separated with the markdown divider: ***.
user