| 
					
					
						
							
						
					
					
				 | 
				@ -20,6 +20,30 @@ def colour(index): | 
			
		
		
	
		
			
				 | 
				 | 
				    array = ["red", "blue", "green"] | 
				 | 
				 | 
				    array = ["red", "blue", "green"] | 
			
		
		
	
		
			
				 | 
				 | 
				    return array[index % len(array)] | 
				 | 
				 | 
				    return array[index % len(array)] | 
			
		
		
	
		
			
				 | 
				 | 
				
 | 
				 | 
				 | 
				
 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				def sort_edges(edges): | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				    return sorted(edges, key = lambda x: (x[0].index, x[1].index)) | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				
 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				def sort_tuples_and_edges(edges): | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				    sorted_tuples = [] | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				    for e in edges: | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				        if e[0].index == num_nodes - 1 and e[1].index == 0: | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				            sorted_tuples.append(e) | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				        elif e[0].index > e[1].index: | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				            sorted_tuples.append((e[1], e[0])) | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				        else: | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				            sorted_tuples.append(e) | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				    return sort_edges(sorted_tuples) | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				
 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				
 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				def to_indices(edge): | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				    return (edge[0].index, edge[1].index) | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				
 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				def list_to_indices(edges): | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				    e = [] | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				    for edge in edges: | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				        e.append(to_indices(edge)) | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				    return e | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				
 | 
			
		
		
	
		
			
				 | 
				 | 
				class Sxiv(ImageShow.UnixViewer): | 
				 | 
				 | 
				class Sxiv(ImageShow.UnixViewer): | 
			
		
		
	
		
			
				 | 
				 | 
				    def get_command_ex(self, file, **options): | 
				 | 
				 | 
				    def get_command_ex(self, file, **options): | 
			
		
		
	
		
			
				 | 
				 | 
				        return ("bspc rule -a \* -o state=floating focus=off && sxiv",) * 2 | 
				 | 
				 | 
				        return ("bspc rule -a \* -o state=floating focus=off && sxiv",) * 2 | 
			
		
		
	
	
		
			
				| 
					
					
					
						
							
						
					
				 | 
				@ -27,7 +51,7 @@ class Sxiv(ImageShow.UnixViewer): | 
			
		
		
	
		
			
				 | 
				 | 
				node_size = 10 | 
				 | 
				 | 
				node_size = 10 | 
			
		
		
	
		
			
				 | 
				 | 
				m, n = 600, 600 | 
				 | 
				 | 
				m, n = 600, 600 | 
			
		
		
	
		
			
				 | 
				 | 
				nodes = [] | 
				 | 
				 | 
				nodes = [] | 
			
		
		
	
		
			
				 | 
				 | 
				num_nodes = 9 | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				num_nodes = 6 | 
			
		
		
	
		
			
				 | 
				 | 
				assert(num_nodes % 3 == 0) | 
				 | 
				 | 
				assert(num_nodes % 3 == 0) | 
			
		
		
	
		
			
				 | 
				 | 
				
 | 
				 | 
				 | 
				
 | 
			
		
		
	
		
			
				 | 
				 | 
				
 | 
				 | 
				 | 
				
 | 
			
		
		
	
	
		
			
				| 
					
						
							
						
					
					
						
							
						
					
					
				 | 
				@ -58,6 +82,11 @@ for i,node in enumerate(nodes): | 
			
		
		
	
		
			
				 | 
				 | 
				    draw.rectangle(node.rect, fill=node.colour) | 
				 | 
				 | 
				    draw.rectangle(node.rect, fill=node.colour) | 
			
		
		
	
		
			
				 | 
				 | 
				    draw.text(node.pos, str(node.index),font=font, fill="black") | 
				 | 
				 | 
				    draw.text(node.pos, str(node.index),font=font, fill="black") | 
			
		
		
	
		
			
				 | 
				 | 
				
 | 
				 | 
				 | 
				
 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				root = [] | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				for i in range(0, num_nodes - 1): | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				    root.append((nodes[i], nodes[i+1])) | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				root_tuples = list_to_indices(root) | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				
 | 
			
		
		
	
		
			
				 | 
				 | 
				
 | 
				 | 
				 | 
				
 | 
			
		
		
	
		
			
				 | 
				 | 
				
 | 
				 | 
				 | 
				
 | 
			
		
		
	
		
			
				 | 
				 | 
				def connect_tuple(d, e): | 
				 | 
				 | 
				def connect_tuple(d, e): | 
			
		
		
	
	
		
			
				| 
					
					
					
						
							
						
					
				 | 
				@ -73,17 +102,6 @@ def draw_tree(edges): | 
			
		
		
	
		
			
				 | 
				 | 
				        connect(d, e[0], e[1]) | 
				 | 
				 | 
				        connect(d, e[0], e[1]) | 
			
		
		
	
		
			
				 | 
				 | 
				    local.show() | 
				 | 
				 | 
				    local.show() | 
			
		
		
	
		
			
				 | 
				 | 
				
 | 
				 | 
				 | 
				
 | 
			
		
		
	
		
			
				 | 
				 | 
				def sort_edges(edges): | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				    return sorted(edges, key = lambda x: (x[0].index, x[1].index)) | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				
 | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				def to_indices(edge): | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				    return (edge[0].index, edge[1].index) | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				
 | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				def list_to_indices(edges): | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				    e = [] | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				    for edge in edges: | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				        e.append(to_indices(edge)) | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				    return e | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				
 | 
				 | 
				 | 
				
 | 
			
		
		
	
		
			
				 | 
				 | 
				def has_crossing(edge, edges): | 
				 | 
				 | 
				def has_crossing(edge, edges): | 
			
		
		
	
		
			
				 | 
				 | 
				    new = to_indices(edge) | 
				 | 
				 | 
				    new = to_indices(edge) | 
			
		
		
	
	
		
			
				| 
					
						
							
						
					
					
						
							
						
					
					
				 | 
				@ -129,9 +147,10 @@ def construct_neighbourhood(edges, index): | 
			
		
		
	
		
			
				 | 
				 | 
				    i = 0 | 
				 | 
				 | 
				    i = 0 | 
			
		
		
	
		
			
				 | 
				 | 
				    #print(list_to_indices(edges)) | 
				 | 
				 | 
				    #print(list_to_indices(edges)) | 
			
		
		
	
		
			
				 | 
				 | 
				    for e in edges: | 
				 | 
				 | 
				    for e in edges: | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				        if not is_from_root(to_indices(e)): continue | 
			
		
		
	
		
			
				 | 
				 | 
				        start = e[0].index | 
				 | 
				 | 
				        start = e[0].index | 
			
		
		
	
		
			
				 | 
				 | 
				        #print("Testing: "  + str(to_indices(e))) | 
				 | 
				 | 
				        #print("Testing: "  + str(to_indices(e))) | 
			
		
		
	
		
			
				 | 
				 | 
				        for new_target in range(start + 1, num_nodes): | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				        for new_target in range(0, num_nodes): | 
			
		
		
	
		
			
				 | 
				 | 
				            new_edge = (e[0], nodes[new_target]) | 
				 | 
				 | 
				            new_edge = (e[0], nodes[new_target]) | 
			
		
		
	
		
			
				 | 
				 | 
				            if(e == new_edge): continue | 
				 | 
				 | 
				            if(e == new_edge): continue | 
			
		
		
	
		
			
				 | 
				 | 
				            cropped_edges = edges[:] | 
				 | 
				 | 
				            cropped_edges = edges[:] | 
			
		
		
	
	
		
			
				| 
					
						
							
						
					
					
						
							
						
					
					
				 | 
				@ -171,7 +190,6 @@ def is_from_root(edge): | 
			
		
		
	
		
			
				 | 
				 | 
				
 | 
				 | 
				 | 
				
 | 
			
		
		
	
		
			
				 | 
				 | 
				def get_largest_non_root_edge(edges): | 
				 | 
				 | 
				def get_largest_non_root_edge(edges): | 
			
		
		
	
		
			
				 | 
				 | 
				    edges.reverse() | 
				 | 
				 | 
				    edges.reverse() | 
			
		
		
	
		
			
				 | 
				 | 
				    print(edges) | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				    for e in edges: | 
				 | 
				 | 
				    for e in edges: | 
			
		
		
	
		
			
				 | 
				 | 
				        if not is_from_root(e): | 
				 | 
				 | 
				        if not is_from_root(e): | 
			
		
		
	
		
			
				 | 
				 | 
				            return e | 
				 | 
				 | 
				            return e | 
			
		
		
	
	
		
			
				| 
					
					
					
						
							
						
					
				 | 
				@ -181,17 +199,35 @@ def get_largest_missing_convex_edge(edges): | 
			
		
		
	
		
			
				 | 
				 | 
				    difference = [e for e in root_tuples if e not in edges] | 
				 | 
				 | 
				    difference = [e for e in root_tuples if e not in edges] | 
			
		
		
	
		
			
				 | 
				 | 
				    return difference[-1] | 
				 | 
				 | 
				    return difference[-1] | 
			
		
		
	
		
			
				 | 
				 | 
				
 | 
				 | 
				 | 
				
 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				def get_missing_convex_edge(edges, tup): | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				    for i in range(tup[0], tup[1]): | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				        if (i,i+1) not in list_to_indices(edges): | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				            print("missing edge: " + str((i,i+1))) | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				            return (nodes[i], nodes[i+1]) | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				
 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				def get_e_bar(edges): | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				    for e in sort_tuples_and_edges(edges): | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				        if not is_from_root(to_indices(e)): | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				            print("e_bar: " + str(to_indices(e))) | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				            return e | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				    return edges | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				
 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				
 | 
			
		
		
	
		
			
				 | 
				 | 
				def get_parent(edges): | 
				 | 
				 | 
				def get_parent(edges): | 
			
		
		
	
		
			
				 | 
				 | 
				    sorted_edges = list_to_indices(sort_edges(edges)) | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				    e = get_largest_non_root_edge(sorted_edges) | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				    sorted_edges = sort_edges(edges) | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				    e = get_e_bar(sorted_edges) | 
			
		
		
	
		
			
				 | 
				 | 
				    if type(e) is list: return list_to_indices(edges) | 
				 | 
				 | 
				    if type(e) is list: return list_to_indices(edges) | 
			
		
		
	
		
			
				 | 
				 | 
				    sorted_edges.remove(e) | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				    sorted_edges.append(get_largest_missing_convex_edge(sorted_edges)) | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				    try: | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				        sorted_edges.remove(e) | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				    except: | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				        sorted_edges.remove((e[1], e[0])) | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				    #sorted_edges.append(get_largest_missing_convex_edge(sorted_edges)) | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				    sorted_edges.append(get_missing_convex_edge(sorted_edges, to_indices(e))) | 
			
		
		
	
		
			
				 | 
				 | 
				    return sorted_edges | 
				 | 
				 | 
				    return sorted_edges | 
			
		
		
	
		
			
				 | 
				 | 
				
 | 
				 | 
				 | 
				
 | 
			
		
		
	
		
			
				 | 
				 | 
				
 | 
				 | 
				 | 
				
 | 
			
		
		
	
		
			
				 | 
				 | 
				def get_parent_in_nodes(edges): | 
				 | 
				 | 
				def get_parent_in_nodes(edges): | 
			
		
		
	
		
			
				 | 
				 | 
				    parent = get_parent(edges) | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				    parent = list_to_indices(get_parent(edges)) | 
			
		
		
	
		
			
				 | 
				 | 
				    p = [] | 
				 | 
				 | 
				    p = [] | 
			
		
		
	
		
			
				 | 
				 | 
				    for e in parent: | 
				 | 
				 | 
				    for e in parent: | 
			
		
		
	
		
			
				 | 
				 | 
				        p.append((nodes[e[0]], nodes[e[1]])) | 
				 | 
				 | 
				        p.append((nodes[e[0]], nodes[e[1]])) | 
			
		
		
	
	
		
			
				| 
					
					
					
						
							
						
					
				 | 
				@ -199,35 +235,46 @@ def get_parent_in_nodes(edges): | 
			
		
		
	
		
			
				 | 
				 | 
				
 | 
				 | 
				 | 
				
 | 
			
		
		
	
		
			
				 | 
				 | 
				
 | 
				 | 
				 | 
				
 | 
			
		
		
	
		
			
				 | 
				 | 
				
 | 
				 | 
				 | 
				
 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				# | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				#test = [] | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				#test.append((nodes[1], nodes[2])) | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				#test.append((nodes[2], nodes[3])) | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				#test.append((nodes[2], nodes[4])) | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				#test.append((nodes[4], nodes[0])) | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				#test.append((nodes[0], nodes[5])) | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				#test.append((nodes[5], nodes[6])) | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				#test.append((nodes[0], nodes[7])) | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				#test.append((nodes[8], nodes[8])) | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				#draw_tree(test) | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				#draw_tree(get_parent_in_nodes(test)) | 
			
		
		
	
		
			
				 | 
				 | 
				
 | 
				 | 
				 | 
				
 | 
			
		
		
	
		
			
				 | 
				 | 
				root = [] | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				for i in range(0, num_nodes - 1): | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				    root.append((nodes[i], nodes[i+1])) | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				root_tuples = list_to_indices(root) | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				draw_tree(root) | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				
 | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				
 | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				assert(False) | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				
 | 
				 | 
				 | 
				
 | 
			
		
		
	
		
			
				 | 
				 | 
				v = root | 
				 | 
				 | 
				v = root | 
			
		
		
	
		
			
				 | 
				 | 
				j = 0 | 
				 | 
				 | 
				j = 0 | 
			
		
		
	
		
			
				 | 
				 | 
				count = 1 | 
				 | 
				 | 
				count = 1 | 
			
		
		
	
		
			
				 | 
				 | 
				while True: | 
				 | 
				 | 
				while True: | 
			
		
		
	
		
			
				 | 
				 | 
				    print("Current v: " + str(list_to_indices(v))) | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				    deg = degree(v) | 
				 | 
				 | 
				    deg = degree(v) | 
			
		
		
	
		
			
				 | 
				 | 
				    print(" degree = " + str(deg)) | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				    #print(" degree = " + str(deg)) | 
			
		
		
	
		
			
				 | 
				 | 
				    while(j != deg): | 
				 | 
				 | 
				    while(j != deg): | 
			
		
		
	
		
			
				 | 
				 | 
				        j = j + 1 | 
				 | 
				 | 
				        j = j + 1 | 
			
		
		
	
		
			
				 | 
				 | 
				        w = sort_edges(get_jth_neighbour(v, j - 1)) | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				        if(sort_edges(get_parent_in_nodes(w)) == sort_edges(v)): | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				            print("\t   " + str(list_to_indices(w))) | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				            print("\t parent: " + str(list_to_indices(get_parent_in_nodes(w)))) | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				        w = sort_tuples_and_edges(get_jth_neighbour(v, j - 1)) | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				        print("\t prob(v): " + str(list_to_indices(v))) | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				        print("\t probing: " + str(list_to_indices(w))) | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				        print("\t pred(w): " + str(list_to_indices(sort_tuples_and_edges(get_parent_in_nodes(w))))) | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				        if(sort_tuples_and_edges(get_parent_in_nodes(w)) == sort_tuples_and_edges(v)): | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				            print("!!! Added: " + str(list_to_indices(w))) | 
			
		
		
	
		
			
				 | 
				 | 
				            v = w | 
				 | 
				 | 
				            v = w | 
			
		
		
	
		
			
				 | 
				 | 
				            j = 0 | 
				 | 
				 | 
				            j = 0 | 
			
		
		
	
		
			
				 | 
				 | 
				            count = count + 1 | 
				 | 
				 | 
				            count = count + 1 | 
			
		
		
	
		
			
				 | 
				 | 
				            print(" Current w:" + str(list_to_indices(v))) | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				            print(" degree = " + str(deg) + " j = " + str(j)) | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				            #print(" Current w:" + str(list_to_indices(v))) | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				            #print(" degree = " + str(deg) + " j = " + str(j)) | 
			
		
		
	
		
			
				 | 
				 | 
				            deg = degree(v) | 
				 | 
				 | 
				            deg = degree(v) | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				            #draw_tree(v) | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				            #input() | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				            #for proc in psutil.process_iter(): | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				            #    if proc.name() == "sxiv": | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				            #        proc.kill() | 
			
		
		
	
		
			
				 | 
				 | 
				 | 
				 | 
				 | 
				        input() | 
			
		
		
	
		
			
				 | 
				 | 
				
 | 
				 | 
				 | 
				
 | 
			
		
		
	
		
			
				 | 
				 | 
				    if(v != root): | 
				 | 
				 | 
				    if(v != root): | 
			
		
		
	
		
			
				 | 
				 | 
				        w = v | 
				 | 
				 | 
				        w = v | 
			
		
		
	
	
		
			
				| 
					
					
					
						
							
						
					
				 | 
				@ -244,10 +291,6 @@ while True: | 
			
		
		
	
		
			
				 | 
				 | 
				        print(j) | 
				 | 
				 | 
				        print(j) | 
			
		
		
	
		
			
				 | 
				 | 
				        break | 
				 | 
				 | 
				        break | 
			
		
		
	
		
			
				 | 
				 | 
				
 | 
				 | 
				 | 
				
 | 
			
		
		
	
		
			
				 | 
				 | 
				
 | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				
 | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				
 | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				
 | 
				 | 
				 | 
				 | 
			
		
		
	
		
			
				 | 
				 | 
				#while True: | 
				 | 
				 | 
				#while True: | 
			
		
		
	
		
			
				 | 
				 | 
				#    for tree in construct_neighbourhood(root, sys.maxsize): | 
				 | 
				 | 
				#    for tree in construct_neighbourhood(root, sys.maxsize): | 
			
		
		
	
		
			
				 | 
				 | 
				#        im1 = im.copy() | 
				 | 
				 | 
				#        im1 = im.copy() | 
			
		
		
	
	
		
			
				| 
					
						
							
						
					
					
					
				 | 
				
  |