#include <bits/stdc++.h>
using namespace std;
bool dfs(string name,unordered_map<string,unordered_set<string>> & adj,
vector<string> & results,unordered_map<string,int> &visited)
{
visited[name] =1;
for(auto it : adj[name])
{
if(visited[it]==0)
{
if(!dfs(it,adj,results,visited))
{
return false;
}
}
else if(visited[it]==1)
{
return false;
}
}
visited[name] =2;
results.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"}},
{"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";
vector<string> results;
if(dfs(name,adj,results,visited))
{
for(string s : results)
{
cout<<"...."<<s;
}
}
else
{
cout<<"Cycle detected no path possible";
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgpib29sIGRmcyhzdHJpbmcgbmFtZSx1bm9yZGVyZWRfbWFwPHN0cmluZyx1bm9yZGVyZWRfc2V0PHN0cmluZz4+ICYgYWRqLAp2ZWN0b3I8c3RyaW5nPiAmIHJlc3VsdHMsdW5vcmRlcmVkX21hcDxzdHJpbmcsaW50PiAmdmlzaXRlZCkKewoJdmlzaXRlZFtuYW1lXSA9MTsKCWZvcihhdXRvIGl0IDogYWRqW25hbWVdKQoJewoJCWlmKHZpc2l0ZWRbaXRdPT0wKQoJCXsKCQkJaWYoIWRmcyhpdCxhZGoscmVzdWx0cyx2aXNpdGVkKSkKCQkJewoJCQkJcmV0dXJuIGZhbHNlOwoJCQl9CgkJCgkJfQoJCWVsc2UgaWYodmlzaXRlZFtpdF09PTEpCgkJewoJCQlyZXR1cm4gZmFsc2U7CgkJfQoJfQoJdmlzaXRlZFtuYW1lXSA9MjsKCXJlc3VsdHMucHVzaF9iYWNrKG5hbWUpOwoJcmV0dXJuIHRydWU7CQp9CgoKaW50IG1haW4oKSB7CgkvLyB5b3VyIGNvZGUgZ29lcyBoZXJlCgl1bm9yZGVyZWRfbWFwPHN0cmluZyx1bm9yZGVyZWRfc2V0PHN0cmluZz4+IGFkaiA9IHsKICAgICAgICB7IlNlcnZpY2UiLCB7IkFkYXB0ZXJzIiwgIkNvcmUiLCAiVXRpbHMifX0sCiAgICAgICAgeyJBZGFwdGVycyIsIHsiSW50ZXJmYWNlcyJ9fSwKICAgICAgICB7IkNvcmUiLCB7IlR5cGVzIn19LAogICAgICAgIHsiVXRpbHMiLCB7IlR5cGVzIn19LAogICAgICAgIHsiSW50ZXJmYWNlcyIsIHsiVHlwZXMifX0sCiAgICAgICAgeyJUeXBlcyIsIHt9fQogICAgfTsKCXVub3JkZXJlZF9tYXA8c3RyaW5nLGludD4gdmlzaXRlZDsKCWZvcihhdXRvIGl0IDogYWRqKQoJewoJCWZvcihhdXRvIGVsZSA6IGl0LnNlY29uZCkKCQl7CgkJCXZpc2l0ZWRbZWxlXT0gMDsKCQl9CgkJdmlzaXRlZFtpdC5maXJzdF09IDA7Cgl9CglzdHJpbmcgbmFtZSA9ICJTZXJ2aWNlIjsKCXZlY3RvcjxzdHJpbmc+IHJlc3VsdHM7CglpZihkZnMobmFtZSxhZGoscmVzdWx0cyx2aXNpdGVkKSkKCXsKCQlmb3Ioc3RyaW5nIHMgOiByZXN1bHRzKQoJCXsKCQkJY291dDw8Ii4uLi4iPDxzOwoJCX0KCX0KCWVsc2UKCXsKCQljb3V0PDwiQ3ljbGUgZGV0ZWN0ZWQgbm8gcGF0aCBwb3NzaWJsZSI7Cgl9CgkKCXJldHVybiAwOwp9