Острівні автобуси#6209

Острівні автобуси

1 секунда
64 мегабайти
Дуже складна

Компанія Island Cargo and Passenger Company планує забезпечити автобусне сполучення для ряду острівних держав Південного Тихого океану. Кожна держава складається з колекції островів, деякі з яких з'єднані мостами. Щоб зекономити кошти, компанія хоче використовувати якомога менше автобусів. Кожен острів повинен мати доступ до автобуса, але компанія використовуватиме лише один автобус для будь-якої групи з двох або більше островів, які з'єднані мостами.

Ваше завдання - написати програму, яка, маючи карту острівної держави, обчислює кількість островів, мостів і найменшу кількість автобусів, необхідних для цієї країни.

Вхідні дані

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

Усі карти містять лише символи крапка (.), X, # та B. Крапки представляють океанську воду. X та # представляють сушу острова. B представляють мости, і кожен X представляє сушу, яка є кінцевою точкою одного або більше мостів.

Кожна карта містить або більше прямокутних островів. Різні острови не є суміжними вертикально або горизонтально. Діагональна суміжність недостатня для проїзду автобуса.

Кожна карта містить або більше горизонтальних або вертикальних мостів. Кожен міст має принаймні один B і з'єднує лише два острови на своїх кінцях. Мости не перетинаються один з одним і не проходять через сушу острова, позначену #. Жоден B не може бути суміжним з іншим B або X, якщо вони не є частиною одного мосту.

Вихідні дані

Для кожної карти ви повинні надрукувати номер карти, а потім рядки, що вказують кількість островів, мостів і автобусів, необхідних. Надрукуйте порожній рядок між кожною парою вихідних даних карти. Дотримуйтесь формату зразкового виводу.

Приклади

Приклад 1

Loading
Loading