#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","Adapters"}},
{"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";
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+IGFkaiA9IHsKeyJTZXJ2aWNlIiwgeyJBZGFwdGVycyIsICJDb3JlIiwgIlV0aWxzIn19LAogeyJBZGFwdGVycyIsIHsiSW50ZXJmYWNlcyJ9fSwKeyJDb3JlIiwgeyJUeXBlcyIsIkFkYXB0ZXJzIn19LAogeyJVdGlscyIsIHsiVHlwZXMifX0sCiB7IkludGVyZmFjZXMiLCB7fX0sCiB7IlR5cGVzIiwge319IH07Cgl1bm9yZGVyZWRfbWFwPHN0cmluZyxpbnQ+IHZpc2l0ZWQ7Cglmb3IoYXV0byBpdCA6IGFkaikKCXsKCQlmb3IoYXV0byBlbGUgOiBpdC5zZWNvbmQpCgkJewoJCQl2aXNpdGVkW2VsZV09IDA7CgkJfQoJCXZpc2l0ZWRbaXQuZmlyc3RdPSAwOwoJfQoJc3RyaW5nIG5hbWUgPSAiU2VydmljZSI7Cgl2ZWN0b3I8c3RyaW5nPiByZXN1bHRzOwoJaWYoZGZzKG5hbWUsYWRqLHJlc3VsdHMsdmlzaXRlZCkpCgl7CgkJZm9yKHN0cmluZyBzIDogcmVzdWx0cykKCQl7CgkJCWNvdXQ8PCIuLi4uIjw8czsKCQl9Cgl9CgllbHNlCgl7CgkJY291dDw8IkN5Y2xlIGRldGVjdGVkIG5vIHBhdGggcG9zc2libGUiOwoJfQoJCglyZXR1cm4gMDsKfQ==