| 
						
						
						
					 | 
				
				 | 
				
					@ -0,0 +1,37 @@ | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					from collections import defaultdict  | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					   | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					class Graph:  | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					   | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    def __init__(self):  | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					   | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        self.graph = defaultdict(list)  | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					   | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    def addEdge(self,u,v):  | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        self.graph[u].append(v)  | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					   | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    def DFSUtil(self,v,visited):  | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					   | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        visited[v]= True | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        print v,  | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					   | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        for i in self.graph[v]:  | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					            if visited[i] == False:  | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					                self.DFSUtil(i, visited)  | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					   | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					   | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    def DFS(self,v):  | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					   | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        visited = [False]*(len(self.graph))  | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					   | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					        self.DFSUtil(v,visited)  | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					   | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					   | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					g = Graph() | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					edges = input("input the number of edges : ") | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					print "enter nodes with zero based indexing : " | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					for i in range(edges):  | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    a, b = map(int, raw_input().split()) | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					    g.addEdge(a, b)  | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					   | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					check = input("DFS check from node : ") | 
				
			
			
		
	
		
			
				
					 | 
					 | 
				
				 | 
				
					g.DFS(check)  |