Bilda ord | 프로그래밍의 벗 PivotOJ
PivotOJ

Bilda ord

시간 제한: 1000ms메모리 제한: 1024MB출처: Programmeringsolympiaden 2017 — skolkvalBOJ 20880

문제

Fatimeh studerar sitt hemspråk som använder det arabiska alfabetet. Just nu sitter hon med en övning där hon ska svara på hur många sätt hon kan bilda ett ord med de givna bokstäverna i uppgiften.

Om det hade varit på svenska kunde övningen ha se ut så här:

r M e a

Eftersom fyra bokstäver är givna vet Fatimeh att hon måste testa 4321=244*3*2*1 = 24 permutationer. Men eftersom bokstaven M är "stor" så vet vi att den måste placeras i ordets början. Med det villkoret kan bara 66 ord bildas, exempelvis MeraMera, men inte raMeraMe. I det arabiska alfabetet har man inte stora och små bokstäver på samma sätt, men man har andra regler om var i ordet bokstaven kan förekomma, även i relation till andra bokstäver. 

I denna uppgift antar vi att det finns två typer av restriktioner: Antingen måste en bokstav komma precis före någon annan bokstav, eller så kan en bokstav bara stå på vissa positioner. Exempel på dessa regler och den notation vi använder finns i följande tabell:

Regel Notation
Bokstav BB måste stå på på plats 11 eller plats 44 B@01,04
Bokstav DD måste direkt föregå CC eller BB D:CB

Skriv ett program som beräknar på hur många sätt som NN olika bokstäver (för enkelhets skull kallade A, B, C,... etc.) kan placeras ut, givet ett antal regler av dessa två typer. 

입력

På första raden står två heltal, antalet bokstäver NN och antalet regler KK. Därefter följer KK rader vardera beskrivande en regel enligt notationen ovan. En viss bokstav kan inte stå först i mer än en regel av vardera typen. Observera att alla platsnummer skrivs med två siffror.

출력

Programmet ska skriva ut ett heltal: antalet sätt bokstäverna kan placeras ut. Svaret kommer alltid att understiga 10 miljoner.

예제

예제 1

입력
4 2
B@01,04
D:CB
출력
6

예제 2

입력
3 2
B@02
A:BC
출력
1

예제 3

입력
3 2
B@02
A:C
출력
0

예제 4

입력
8 4
E@02,08,05
A:CEF
A@05,02,03
C:ABCDH
출력
918
코드를 제출하려면 로그인하세요.