Недавно на кружке по программированию Петя узнал об обходе в глубину. Обход в глубину используется во многих алгоритмах на графах. Петя сразу же реализовал обход в глубину на своих любимых языках программирования --- паскале и си.
int a[maxn + 1][maxn + 1];
int visited[maxn + 1];
void dfs(int v) {
printf("%d\n", v);
visited[v] = 1;
for (int i = 1; i <= n; i++) {
if ((a[v][i] != 0) &&
(visited[i] == 0)) {
dfs(i);
printf("%d\n", v);
}
}
}
void graph_dfs() {
for (int i = 1; i <= n; i++) {
if (visited[i] == 0) {
dfs(i);
}
}
}
Петина программа хранит граф с использованием матрицы смежности в массиве <<a>> (вершины графа пронумерованы от 1 до n). В массиве <<visited>> помечается, в каких вершинах обход в глубину уже побывал.
Петя запустил процедуру <<graph\_dfs>> для некоторого неориентированного графа G с n вершинами и сохранил ее вывод. А вот сам граф потерялся. Теперь Пете интересно, какое максимальное количество ребер могло быть в графе G. Помогите ему выяснить это!
Первая строка входного файла содержит два целых числа: n и l --- количество вершин в графе и количество чисел в выведенной последовательности (1≤n≤300, 1≤l≤2n−1). Следующие l строк по одному числу --- вывод Петиной программы. Гарантируется, что существует хотя бы один граф, запуск программы Пети на котором приводит к приведенному во входном файле выводу.
На первой строке выходного файла выведите одно число m --- максимальное возможное количество ребер в графе. Следующие m строк должны содержать по два целых числа --- номера вершин, соединенных ребрами. В графе не должно быть петель и кратных ребер.