Počet bodov:
Program:  20b

Povedali ste si niekedy po nástupe do autobusu: “Toľko voľného miesta! Prečo tu nie sú sedadlá?”. Nuž, časy, keď ste boli nútení stáť v poloprázdnom autobuse, budú už čoskoro minulosťou. Prichádza revolúcia v hromadnej doprave.

Na trhu sa totiž objavil superbus – autobus, v ktorom je každý centimeter štvorcový pokrytý čalúnenou sedačkou. Interiér superbusu obsahuje \(n\) radov a v každom z nich je \(m\) sedačiek vedľa seba. Navyše, sedačky nie sú všetky otočené dopredu. Aby si cestujúci mohli vybrať smer, ktorým sa chcú počas jazdy pozerať, v superbuse sú sedadlá pootáčané do každého zo 4 smerov.

Pri prvom testovaní superbusu sa ale zistilo, že má jednu fatálnu chybu – niektoré sedačky sú otočené čelom k sebe. A keď sú obe obsadené, niet miesta pre nohy cestujúcich.

Dizajnér superbusu preto potrebuje niektoré sedačky otočiť niekoľkokrát o deväťdesiat stupňov tak, aby žiadne dve sedačky neboli k sebe otočené čelom. Nakoľko už bolo vyrobených veľa superbusov, v každom z nich bude nutné tieto sedačky otočiť. To je veľa roboty – je preto žiadúce, aby bolo potrebné sedačky otáčať čo najmenejkrát.

Úloha

Na vstupe je mriežka, v ktorej je každé políčko – sedadlo – otočené na sever, východ, juh alebo na západ.

O mriežke hovoríme, že je v dobrom stave práve vtedy, keď žiadne dve susedné sedadlá nie sú natočené proti sebe.

V jednom kroku je povolené otočiť niektoré sedadlo o deväťdesiat stupňov doľava alebo doprava. Zistite, koľko najmenej krokov je potrebných na to, aby sme mriežku dostali do dobrého stavu.

Netradične vám k tejto úlohe naznačíme riešenie. Ak nápovedu nechcete vedieť, nepozerajte do poznámky pod čiarou. Ak si s úlohou neviete poradiť, možno vám poznámka pod čiarou1 pomôže.

Formát vstupu

Na prvom riadku vstupu sú dve celé čísla \(1 \leq n, m \leq 50\) – rozmery mriežky.

Nasleduje \(n\) riadkov, na každom z nich je \(m\) znakov popisujúcich natočenie danej sedačky. Znak ^ zodpovedá natočeniu na sever, > na východ, v na juh, a < na západ.

Formát výstupu

Na výstup vypíšte jedno celé číslo – najmenší počet krokov, na ktorý je možné dostať mriežku do dobrého stavu.

Príklad

Input:

3 3
>v<
>^<
^^^

Output:

2

Otočíme sedadlo v strede prvého riadku dvarát o 90 stupňov.

Input:

1 10
>>><<<>><<

Output:

2

Napríklad môžeme otočiť tretie sedadlo zľava a tretie sedladlo od konca smerom na sever.


  1. Pozor, blíži sa prezradenie nápovedy. Odporúčame naštudovať si riešenie problému minimum-cost maximum flow. Na internete nájdete veľa dobrých aj zlých materiálov k tejto téme. Nezabudnite však, že program, ktorý odovzdáte, musí byť váš vlastný, nie skopírovaný z cudzieho zdroja.

Odovzdávanie

Na odovzdávanie sa musíš prihlásiť

Otázky a diskusia

Po skončení kola budete mať príležitosť na diskutovanie o riešeniach v diskusii pod vzorovým riešením.