Here's the completed code:
```
def dfs(visited_vertices, graph, current_vertex):
# Check if current_vertex hasn't been visited yet
if current_vertex not in visited_vertices:
print(current_vertex)
# Add current_vertex to visited_vertices
visited_vertices.add(current_vertex)
for adjacent_vertex in graph[current_vertex]:
# Call recursively with the appropriate values
dfs(visited_vertices, graph, adjacent_vertex)
dfs(set(), graph, '0')
```
The code defines a dfs function that performs a depth-first search on a graph. It takes three parameters: visited_vertices, which is a set of vertices that have already been visited; graph, which is a dictionary that represents the graph; and current_vertex, which is the vertex to start the search from. It starts by checking whether the current vertex has already been visited. If it hasn't, it prints the current vertex and adds it to the visited_vertices set. Then, it loops through all adjacent vertices of the current vertex and calls the dfs function recursively with each adjacent vertex as the new current vertex. This process continues until all vertices in the graph have been visited. Finally, it creates an empty set for visited_vertices, a dictionary for graph, and calls the dfs function with the starting vertex '0'.