import heapq
def dijkstra(n, graph,s):
#check for invalid input
if n<=0 or any(graph[i][j]<0 for i in range(n)for j in range(n)):
print("invalid input")
return
#Initialize distances 
dist=[float('inf')]*n
dist[s]=0
visited=[false]*n
#priority queue:(distance,node)
pq=[(0,s)]
while pq:
d,u=heapq.heappop(pq)
if visited[u]:
continue
visited[u]=Ture
for v in range(n):
if graph[u][v]!=0 and not visited[v]:
if dist[v]>d+graph[u][v]:
   dist[v]=d+graph[u][v]
   heapq.heappush(pq,(dist[v],v))
   print(*dist)