`Всеукраїнський центр проведення олімпіад в мережі Інтернет

Задача ACCESS. Готуючись до олімпіади з ІКТ знавці  баз даних (а знавці є, адже всі вивчають ACCESS!) зіткнулися з такою задачею: є база, яка задає орієнтований граф у вигляді таблиці вершин, між якими є ребро. Потрібно зробити запити 2-х видів:

- додати нове ребро до графа;

- повідомити кількість ребер у найкоротшому шляху від  першої вершини до заданої.

Чи ACCESS  «не дуже СУБД» для роботи з базами, чи «знавці не знавці», але не вийшло… Знавці ІКТ просять вас, програмістів, написати програму,  яка буде виконувати вказані запити по мірі їх надходження: повідомляти найкоротшу відстань від першої вершини до заданої та додавати нові ребра. Зрозуміло, що перед початком роботи програми база порожня. А ось відповіді на запити чомусь користувачеві треба отримувати у зворотному порядку.

Технічні умови. Програма ACCESS читає з пристрою стандартного введення у першому рядку два числа N, М (1 ≤ N ≤ 1000, 1 ≤  M ≤  30 000) - кількість вершин та кількість запитів.

У кожному з наступних M рядків міститься інформація про запит до бази:

  1. "+ x y"- додати ребро до графа, яке йде з вершини x до  вершини y (1 ≤ x, y ≤ N);
  2. "? k" - визначити найкоротший шлях від першої вершини (тобто з номером 1) до вершини з номером  k (тобто  мінімальну  кількість ребер, що входять до такого шляху).

Програма виводить через пропуски в один рядок на пристрій стандартного виведення відповідь на запити про довжину найкоротшого шляху в порядку, зворотному до їх надходження. Якщо шляху від першої вершини до вказаної не існує, виведіть -1.

Приклад

Введення  

2  4
? 2

+ 1 2
? 1
? 2

Виведення     

1 0 -1

 

© LIKT 1998-2024