Обход в глубину

아직 제출이 없습니다시간 제한1초메모리 제한1024 MB

문제

Недавно на кружке по программированию Петя узнал об обходе в глубину. Обход в глубину используется во многих алгоритмах на графах. Петя сразу же реализовал обход в глубину на своих любимых языках программирования --- паскале и си.

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 до nn). В массиве <<visited>> помечается, в каких вершинах обход в глубину уже побывал.

Петя запустил процедуру <<graph\_dfs>> для некоторого неориентированного графа GG с nn вершинами и сохранил ее вывод. А вот сам граф потерялся. Теперь Пете интересно, какое максимальное количество ребер могло быть в графе GG. Помогите ему выяснить это!

입력

Первая строка входного файла содержит два целых числа: nn и ll --- количество вершин в графе и количество чисел в выведенной последовательности (1n3001 \le n \le 300, 1l2n11 \le l \le 2n-1). Следующие ll строк по одному числу --- вывод Петиной программы. Гарантируется, что существует хотя бы один граф, запуск программы Пети на котором приводит к приведенному во входном файле выводу.

출력

На первой строке выходного файла выведите одно число mm --- максимальное возможное количество ребер в графе. Следующие mm строк должны содержать по два целых числа --- номера вершин, соединенных ребрами. В графе не должно быть петель и кратных ребер.