시간 제한메모리 제한제출정답맞힌 사람정답 비율
1 초 1024 MB111100.000%

문제

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

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 \le n \le 300$, $1 \le l \le 2n-1$). Следующие $l$ строк по одному числу --- вывод Петиной программы. Гарантируется, что существует хотя бы один граф, запуск программы Пети на котором приводит к приведенному во входном файле выводу.

출력

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

예제 입력 1

6 10
1
2
3
2
4
2
1
5
6
5

예제 출력 1

6
1 2
1 3
1 4
2 3
2 4
5 6