ТПУ: основной тур

Соревнование завершилось 15.04.18 в 16:00

L. Маршруты для прогулки

Ограничение по времени: 2 с.
Ограничение по памяти: 256 МБ

Лена живёт в городе, где имеется n перекрёстков, некоторые из которых связаны с помощью m участков двунаправленных дорог. Все перекрёстки пронумерованы целыми последовательными числами от 1 до n.

Каждый день Лена выходит на прогулку и гуляет по некоторому маршруту. Она выбирает пять перекрёстков a, b, c, d и e так, чтобы по участкам дорог можно было пройти по маршруту: a \rightarrow b \rightarrow c \rightarrow a \rightarrow d \rightarrow e \rightarrow a, и гуляет по этом маршруту. Причём символом ‘\rightarrow’ обозначен переход ровно по одному участку дороги.

Лена не хочет дважды гулять по одному и тому же маршруту, поэтому она хочет знать количество различных подходящих маршрутов в городе.

Ваша задача — написать программу, которая по информации о перекрёстках города и соединяющих их участках дорог определит искомое количество подходящих маршрутов.

Входные данные

Первая строка входных данных содержит два целых числа n и m — количество перекрёстков и количество участков дорог соответственно (2 \leqslant n \leqslant 10^{3}, 1 \leqslant m \leqslant 10^{5}).

Далее следует m строк, каждая из которых описывает очередной участок дороги двумя целыми числами u_{i} и v_{i} — номера соединяемых этим участком перекрёстков (1 \leqslant u_{i}, v_{i} \leqslant n, u_{i} \neq v_{i}).

Гарантируется, что каждая пара перекрёстков соединяется не более чем одним участком дороги.

Выходные данные

Единственная строка выходных данных должна содержать единственное целое неотрицательное число — искомое количество подходящих маршрутов.

Примеры
Стандартный вводСтандартный вывод
5 8
5 2
1 2
2 3
3 5
3 4
4 1
5 1
4 5
16
5 4
1 2
2 3
3 4
4 1
0