#include <iostream>
using namespace std;
struct Vertex {
int index{ -1 };
Vertex* next{ nullptr };
};
enum class COLOR {
WHITE, GRAY, BLACK
};
struct Node {
int d{};
int f{};
COLOR color{ COLOR::WHITE };
};
void recurse_delete(Vertex* v) {
if (v->next) {
recurse_delete(v->next);
}
else {
delete v;
}
}
void delete_list(Vertex* V, size_t n) {
Vertex* head{};
Vertex* p{};
for (int i = 0; i < n; ++i) {
head = &V[i];
if ((p = head->next)) {
recurse_delete(p);
}
}
delete[]V;
}
void insert(Vertex* V, int from, int to) {
Vertex* head = &V[from];
Vertex* p = head->next;
head->next = new Vertex{};
head->next->index = to;
head->next->next = p;
}
void DFS_VISIT(Vertex* V, Node* N, int u, int& time) {
time++;
N[u].color = COLOR::GRAY;
N[u].d = time;
Vertex* head = &V[u];
Vertex* p = head->next;
while (p)