/*
Input: {'a','p'}, {'d','p'}, {'h','a'}, {'h', 'd'}
Output - [p, a, d, h]
p->a
*/
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
vector<char> bfs (vector<vector<char>> & list)
{
vector<char> res;
vector<char> empty;
unordered_map<char,vector<char>> adj;
unordered_set<char> distChars;
unordered_map <char,int> indegree;
for(int i=0;i<list.size();i++)
{
int x = list[i][0];
int y = list[i][1];
// y->x
indegree[x]++;
adj[y].push_back(x);
distChars.insert(x);
distChars.insert(y);
}
queue<char> q;
for(auto z :distChars )
{
if(indegree[z]==0)
{
q.push(z);
}
}
//cout<<"qsize"<<q.size();
while(q.size()>0)
{
char z = q.front();
res.push_back(z);
q.pop();
for(auto adjChar : adj[z])
{
indegree[adjChar]--;
if(indegree[adjChar]==0)
{
q.push(adjChar);
}
}
}
if(res.size() < distChars.size())
{
return empty;
}
return res;
}
int main() {
// your code goes here
vector<vector<char>> list = {{'a','p'}, {'d','p'}, {'h','a'}, {'h', 'd'},{'a','h'}};
vector<char> res;
res = bfs (list);
if(res.size()==0)
{
cout<<"Cycle is exisitng";
}
for(auto c : res)
{
cout<<c<<",";
}
return 0;
}
LyoKSW5wdXQ6IHsnYScsJ3AnfSwgeydkJywncCd9LCB7J2gnLCdhJ30sIHsnaCcsICdkJ30gCk91dHB1dCAtIFtwLCBhLCBkLCBoXSAKCnAtPmEKCiovCgojaW5jbHVkZSA8aW9zdHJlYW0+CiNpbmNsdWRlIDxiaXRzL3N0ZGMrKy5oPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKCgp2ZWN0b3I8Y2hhcj4gIGJmcyAodmVjdG9yPHZlY3RvcjxjaGFyPj4gJiBsaXN0KQp7Cgl2ZWN0b3I8Y2hhcj4gcmVzOwoJdmVjdG9yPGNoYXI+IGVtcHR5OwoJdW5vcmRlcmVkX21hcDxjaGFyLHZlY3RvcjxjaGFyPj4gYWRqOwoJdW5vcmRlcmVkX3NldDxjaGFyPiBkaXN0Q2hhcnM7Cgl1bm9yZGVyZWRfbWFwIDxjaGFyLGludD4gaW5kZWdyZWU7Cglmb3IoaW50IGk9MDtpPGxpc3Quc2l6ZSgpO2krKykKCXsKCQlpbnQgeCA9IGxpc3RbaV1bMF07CgkJaW50IHkgPSBsaXN0W2ldWzFdOwoJCS8vIHktPngKCQlpbmRlZ3JlZVt4XSsrOwoJCWFkalt5XS5wdXNoX2JhY2soeCk7CgkJZGlzdENoYXJzLmluc2VydCh4KTsKCQlkaXN0Q2hhcnMuaW5zZXJ0KHkpOwoJfQoJcXVldWU8Y2hhcj4gcTsKCWZvcihhdXRvIHogOmRpc3RDaGFycyAgKQoJewoJCWlmKGluZGVncmVlW3pdPT0wKQoJCXsKCQkJcS5wdXNoKHopOwoJCX0KCX0KCS8vY291dDw8InFzaXplIjw8cS5zaXplKCk7Cgl3aGlsZShxLnNpemUoKT4wKQoJewoJCWNoYXIgeiA9IHEuZnJvbnQoKTsKCQlyZXMucHVzaF9iYWNrKHopOwoJCXEucG9wKCk7CgkJZm9yKGF1dG8gYWRqQ2hhciA6IGFkalt6XSkKCQl7CgkJCWluZGVncmVlW2FkakNoYXJdLS07CgkJCWlmKGluZGVncmVlW2FkakNoYXJdPT0wKQoJCQl7CgkJCQlxLnB1c2goYWRqQ2hhcik7CgkJCX0KCQl9Cgl9CglpZihyZXMuc2l6ZSgpIDwgZGlzdENoYXJzLnNpemUoKSkKCXsKCQlyZXR1cm4gZW1wdHk7Cgl9CglyZXR1cm4gIHJlczsKCQp9CmludCBtYWluKCkgewoJLy8geW91ciBjb2RlIGdvZXMgaGVyZQoJCgl2ZWN0b3I8dmVjdG9yPGNoYXI+PiBsaXN0ID0ge3snYScsJ3AnfSwgeydkJywncCd9LCB7J2gnLCdhJ30sIHsnaCcsICdkJ30seydhJywnaCd9fTsKCXZlY3RvcjxjaGFyPiByZXM7CglyZXMgPSBiZnMgKGxpc3QpOwoJaWYocmVzLnNpemUoKT09MCkKCXsKCQljb3V0PDwiQ3ljbGUgaXMgZXhpc2l0bmciOwoJfQoJZm9yKGF1dG8gYyA6IHJlcykKCXsKCQljb3V0PDxjPDwiLCI7Cgl9CgkKCXJldHVybiAwOwp9