#include<cstdio>
#include<list>
#include<queue>
using namespace std;
int V;
list<int>* point;
void Graph_Make(int V)
{
point=new list<int>[V];
}
void Edge_Create(int u,int v)
{
point[u].push_back(v);
}
void Show_Graph()
{
int i;
for(i=0;i<V;i++)
{
printf("\n");
printf("%d :",i);
for(auto it=point[i].begin();it!=point[i].end();it++)
printf("%d ",*it);
}
}
void DFS_Recursive(int v,bool array1[])
{
printf("%d ",v);
array1[v]=true;
for(auto it=point[v].begin();it!=point[v].end();it++)
if(array1[*it]==false)
DFS_Recursive(*it,array1);
}
void DFS(int s)
{
bool array1[V];
for(int i=0;i<V;i++)
array1[i]=false;
DFS_Recursive(s,array1);
for(int i=0;i<V;i++)
if(array1[i]==false)
DFS_Recursive(i,array1);
}
int main(void)
{
int s;
printf("\n Enter the vertices in a graph");
scanf("%d",&V);
Graph_Make(V);
Show_Graph();
printf("\n Enter the node from where u want to start your DFS");
scanf("%d",&s);
printf("\n\n DFT of above tree is : ");
DFS(s);
return(0);
}
ICAgICAgICAgI2luY2x1ZGU8Y3N0ZGlvPgogICAgICAgICAjaW5jbHVkZTxsaXN0PgogICAgICAgICAjaW5jbHVkZTxxdWV1ZT4KCiAgICAgICAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCiAgICAgaW50IFY7CiAgICAgbGlzdDxpbnQ+KiBwb2ludDsKCgoKICAgICAgdm9pZCBHcmFwaF9NYWtlKGludCBWKQogICAgICB7CiAgICAgICAgICBwb2ludD1uZXcgbGlzdDxpbnQ+W1ZdOwogICAgICB9CgoKICAgICAgdm9pZCBFZGdlX0NyZWF0ZShpbnQgdSxpbnQgdikKICAgICAgewogICAgICAgICBwb2ludFt1XS5wdXNoX2JhY2sodik7CiAgICAgIH0KCiAgICAgdm9pZCBTaG93X0dyYXBoKCkKICAgICB7CiAgICAgICAgaW50IGk7CiAgICAgICAgZm9yKGk9MDtpPFY7aSsrKQogICAgICAgIHsKICAgICAgICAgIHByaW50ZigiXG4iKTsKICAgICAgICAgIHByaW50ZigiJWQgOiIsaSk7CiAgICAgICAgICBmb3IoYXV0byBpdD1wb2ludFtpXS5iZWdpbigpO2l0IT1wb2ludFtpXS5lbmQoKTtpdCsrKQogICAgICAgICAgICAgICBwcmludGYoIiVkICIsKml0KTsKICAgICAgICB9CiAgICAgfQoKICAgICB2b2lkIERGU19SZWN1cnNpdmUoaW50IHYsYm9vbCBhcnJheTFbXSkKICAgICB7CiAgICAgICAgcHJpbnRmKCIlZCAiLHYpOwogICAgICAgIGFycmF5MVt2XT10cnVlOwoKICAgICAgICBmb3IoYXV0byBpdD1wb2ludFt2XS5iZWdpbigpO2l0IT1wb2ludFt2XS5lbmQoKTtpdCsrKQogICAgICAgICAgICBpZihhcnJheTFbKml0XT09ZmFsc2UpCiAgICAgICAgICAgICAgICBERlNfUmVjdXJzaXZlKCppdCxhcnJheTEpOwogICAgIH0KCgoKICAgICAgdm9pZCBERlMoaW50IHMpCiAgICAgIHsKICAgICAgICAgYm9vbCBhcnJheTFbVl07CiAgICAgICAgIGZvcihpbnQgaT0wO2k8VjtpKyspCiAgICAgICAgICAgIGFycmF5MVtpXT1mYWxzZTsKCiAgICAgICAgIERGU19SZWN1cnNpdmUocyxhcnJheTEpOwoKICAgICAgICAgZm9yKGludCBpPTA7aTxWO2krKykKICAgICAgICAgICAgaWYoYXJyYXkxW2ldPT1mYWxzZSkKICAgICAgICAgICAgICAgREZTX1JlY3Vyc2l2ZShpLGFycmF5MSk7CiAgICAgIH0KCgoKCiAgICAgIGludCBtYWluKHZvaWQpCiAgICAgIHsKICAgICAgICAgaW50IHM7CiAgICAgICAgIHByaW50ZigiXG4gRW50ZXIgdGhlIHZlcnRpY2VzIGluIGEgZ3JhcGgiKTsKICAgICAgICAgc2NhbmYoIiVkIiwmVik7CiAgICAgICAgIEdyYXBoX01ha2UoVik7CiAgICAgICAgIFNob3dfR3JhcGgoKTsKICAgICAgICAgcHJpbnRmKCJcbiBFbnRlciB0aGUgbm9kZSBmcm9tIHdoZXJlIHUgd2FudCB0byBzdGFydCB5b3VyIERGUyIpOwogICAgICAgICBzY2FuZigiJWQiLCZzKTsKICAgICAgICAgcHJpbnRmKCJcblxuIERGVCBvZiBhYm92ZSB0cmVlIGlzIDogIik7CiAgICAgICAgIERGUyhzKTsKICAgICAgICAgcmV0dXJuKDApOwogICAgICAgICB9Cg==