#include <bits/stdc++.h>
using namespace std;
bool dfs(string name,unordered_map<string,unordered_set<string>> & adj,
unordered_map <int,vector<string>> &results,unordered_map<string,int> &visited,int level)
{
visited[name] =1;
for(auto it : adj[name])
{
if(visited[it]==0)
{
if(!dfs(it,adj,results,visited,level+1))
{
return false;
}
}
else if(visited[it]==1)
{
return false;
}
}
visited[name] =2;
results[level].push_back(name);
return true;
}
int main() {
// your code goes here
unordered_map<string,unordered_set<string>> adj = {
{"Service", {"Adapters", "Core", "Utils"}},
{"Adapters", {"Interfaces"}},
{"Core", {"Types"}},
{"Utils", {"Types"}},
{"Interfaces", {}},
{"Types", {}} };
unordered_map<string,int> visited;
for(auto it : adj)
{
for(auto ele : it.second)
{
visited[ele]= 0;
}
visited[it.first]= 0;
}
string name = "Service";
unordered_map <int,vector<string>> results;
if(dfs(name,adj,results,visited,1))
{
for(int i=results.size();i>=1;i--)
{
for(auto it : results[i])
{
cout<<" > "<<it;
}
}
}
else
{
cout<<"Cycle detected no path possible";
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgpib29sIGRmcyhzdHJpbmcgbmFtZSx1bm9yZGVyZWRfbWFwPHN0cmluZyx1bm9yZGVyZWRfc2V0PHN0cmluZz4+ICYgYWRqLAp1bm9yZGVyZWRfbWFwIDxpbnQsdmVjdG9yPHN0cmluZz4+ICZyZXN1bHRzLHVub3JkZXJlZF9tYXA8c3RyaW5nLGludD4gJnZpc2l0ZWQsaW50IGxldmVsKQp7Cgl2aXNpdGVkW25hbWVdID0xOwoJZm9yKGF1dG8gaXQgOiBhZGpbbmFtZV0pCgl7CgkJaWYodmlzaXRlZFtpdF09PTApCgkJewoJCQlpZighZGZzKGl0LGFkaixyZXN1bHRzLHZpc2l0ZWQsbGV2ZWwrMSkpCgkJCXsKCQkJCQoJCQkJcmV0dXJuIGZhbHNlOwoJCQl9CgkJfQoJCWVsc2UgaWYodmlzaXRlZFtpdF09PTEpCgkJewoJCQlyZXR1cm4gZmFsc2U7CgkJfQoJfQoJdmlzaXRlZFtuYW1lXSA9MjsKCXJlc3VsdHNbbGV2ZWxdLnB1c2hfYmFjayhuYW1lKTsKCXJldHVybiB0cnVlOwkKfQoKCmludCBtYWluKCkgewoJLy8geW91ciBjb2RlIGdvZXMgaGVyZQoJdW5vcmRlcmVkX21hcDxzdHJpbmcsdW5vcmRlcmVkX3NldDxzdHJpbmc+PiBhZGogPSB7CnsiU2VydmljZSIsIHsiQWRhcHRlcnMiLCAiQ29yZSIsICJVdGlscyJ9fSwKIHsiQWRhcHRlcnMiLCB7IkludGVyZmFjZXMifX0sCnsiQ29yZSIsIHsiVHlwZXMifX0sCiB7IlV0aWxzIiwgeyJUeXBlcyJ9fSwKIHsiSW50ZXJmYWNlcyIsIHt9fSwKIHsiVHlwZXMiLCB7fX0gfTsKCXVub3JkZXJlZF9tYXA8c3RyaW5nLGludD4gdmlzaXRlZDsKCWZvcihhdXRvIGl0IDogYWRqKQoJewoJCWZvcihhdXRvIGVsZSA6IGl0LnNlY29uZCkKCQl7CgkJCXZpc2l0ZWRbZWxlXT0gMDsKCQl9CgkJdmlzaXRlZFtpdC5maXJzdF09IDA7Cgl9CglzdHJpbmcgbmFtZSA9ICJTZXJ2aWNlIjsKCXVub3JkZXJlZF9tYXAgPGludCx2ZWN0b3I8c3RyaW5nPj4gcmVzdWx0czsKCWlmKGRmcyhuYW1lLGFkaixyZXN1bHRzLHZpc2l0ZWQsMSkpCgl7CgkJZm9yKGludCBpPXJlc3VsdHMuc2l6ZSgpO2k+PTE7aS0tKQoJCXsKCQkJZm9yKGF1dG8gaXQgOiByZXN1bHRzW2ldKQoJCQl7CgkJCQljb3V0PDwiID4gIjw8aXQ7CgkJCX0KCQl9Cgl9CgllbHNlCgl7CgkJY291dDw8IkN5Y2xlIGRldGVjdGVkIG5vIHBhdGggcG9zc2libGUiOwoJfQoJCglyZXR1cm4gMDsKfQ==