Нумерація шляхів#1101

Нумерація шляхів

1 секунда
128 мегабайтів
Дуже легка

Перехрестя в місті з'єднані вулицями з одностороннім рухом. Напишіть програму, яка обчислить кількість різних маршрутів між кожною парою перехресть. Маршрут — це послідовність односторонніх вулиць, що з'єднують два перехрестя.

Перехрестя позначаються невід'ємними цілими числами. Одностороння вулиця задається парою перехресть, які вона з'єднує. Наприклад, означає, що є одностороння вулиця від перехрестя до перехрестя . Зауважте, що двосторонню вулицю можна змоделювати двома односторонніми: та .

Розглянемо місто з чотирма перехрестями, з'єднаними наступним чином:

Є один маршрут від перехрестя до , два маршрути від до (це 0 \to 1 \to 2 та 0 \to 2), два маршрути від до , один маршрут від до , один маршрут від до , один маршрут від до і жодного іншого маршруту.

Може трапитися так, що існує нескінченно багато різних маршрутів між деякими перехрестями. Наприклад, якщо до наведених вище вулиць додати , то від до буде лиш один маршрут, але тепер існує нескінченно багато різних маршрутів від до . Це пов'язано з тим, що після досягнення та можна скільки завгодно разів повторювати шлях між та у різні боки й отримувати нові різні маршрути. Наприклад, 0 \to 2 \to 3 \to 2 \to 3 \to 2 та 0 \to 2 \to 3 \to 2 — це різні маршрути.

Вхідні дані

Перше число — це кількість односторонніх вулиць у місті, далі йде опис цих вулиць. Кожна вулиця представляється парою перехресть, які вона з'єднує: кожна пара — це одностороння вулиця від перехрестя до . У всіх містах перехрестя нумеруються послідовно від до найбільшого номера перехрестя. Усі цілі числа у вхідних даних розділені пробілом.

Ніколи не буде вулиці, яка з'єднує перехрестя саме із собою. Жодне місто не матиме більше перехресть.

Вихідні дані

Виведіть квадратну матрицю, що містить кількість різних маршрутів між перехрестями і . Якщо позначити вихідну матрицю як , то M_{j k} — це кількість різних маршрутів від перехрестя до перехрестя . Виводьте матрицю по рядках, у порядку зростання номерів рядків.

Якщо між двома перехрестями існує нескінченно багато маршрутів, виведіть . Не переймайтеся вирівнюванням та форматуванням виводу. Усі числа в кожному рядку матриці розділяйте одним пробілом.

Приклади

Приклад 1

Loading
Loading

Приклад 2

Loading
Loading