I got this python coding for below quesion but i dont know how to run the code . i dont know how the input should be please do help me out and provide me with some screenshots on how to run the coding to refer thank you so much!!! Write a program ( using any programming language) that implements A* algorithm for solving n- puzzle problem (n<=20) that is a generalization for 8-puzzle problem. propose and implement four different heuristics for this problem. import heapq import math # Define a class for nodes in the search tree class Node: def __init__(self, state, parent=None, action=None, g=0, h=0): self.state = state self.parent = parent self.action = action self.g = g self.h = h def f(self): return self.g + self.h def __lt__(self, other): return self.f() < other.f() # Define a function to get the blank tile position in the puzzle def find_blank(puzzle): for i in range(len(puzzle)): for j in range(len(puzzle)): if puzzle[i][j] == 0: return i, j return None # Define a function to get the successors of a node in the search tree def get_successors(node): successors = [] blank_i, blank_j = find_blank(node.state) for action in ["up", "down", "left", "right"]: new_i, new_j = blank_i, blank_j if action == "up": new_i -= 1 elif action == "down": new_i += 1 elif action == "left": new_j -= 1 elif action == "right": new_j += 1 if 0 <= new_i < len(node.state) and 0 <= new_j < len(node.state): new_state = [row[:] for row in node.state] new_state[blank_i][blank_j], new_state[new_i][new_j] = new_state[new_i][new_j], new_state[blank_i][blank_j] successors.append(Node(new_state, node, action, node.g + 1, 0)) return successors # Define a function to check if a state is the goal state def is_goal(puzzle): n = len(puzzle) return all(puzzle[i][j] == i * n + j + 1 for i in range(n) for j in range(n - 1)) and puzzle[n - 1][n - 1] == 0 # Define a function to calculate the number of misplaced tiles heuristic def num_misplaced_tiles(puzzle): n = len(puzzle) return sum(puzzle[i][j] != i * n + j + 1 for i in range(n) for j in range(n)) # Define a function to calculate the Manhattan distance heuristic def manhattan_distance(puzzle): n = len(puzzle) distance = 0 for i in range(n): for j in range(n): if puzzle[i][j] != 0: row = (puzzle[i][j] - 1) // n col = (puzzle[i][j] - 1) % n distance += abs(i - row) + abs(j - col) return distance # Define a function to calculate the Euclidean distance heuristic def euclidean_distance(puzzle): n = len(puzzle) distance = 0 for i in range(n): for j in range(n): if puzzle[i][j] != 0: row = (puzzle[i][j] - 1).