W pewnym bajtockim turnieju gry w kości stawiło się wielu znanych na całym świecie graczy. Rozegrano tu wiele fascynujących partii, których przebiegi zostaną udostępnione w bajtockiej gazecie. Zasady partii są następujące:
każdy z dwóch graczy dysponuje dwiema kostkami do gry. Między dwoma zawodnikami zostaje rozegranych n partii. W pojedynczej partii wygrywa ten, który wyrzuci w sumie większą liczbę oczek.
Niestety z jakiś powodów zamiast liczb oczek komputer zanotował ich odpowiedniki literowe ze zbioru: {A, B, C, D, E, F}. Dodatkowo wiadomo, że litera A nie koniecznie odpowiada jednemu oczku, litera B dwom oczkom itd. Na podstawie wyników określ jakie wartości zostały przypisane literom.
W pierwszym wierszu jedna liczba określająca liczbę zestawów danych. (nie więcej niż tysiąc).
Każdy zestaw danych składa się z jednej liczby n określającej ilość partii (0 < n < 1000).
Każda partia składa się z czterech liter i jednego znaku ze zbioru {r, 1, 2}. Pierwsze dwie litery to oczka wyrzucone przez pierwszego gracza, następne dwie przez drugiego, natomiast znak r oznacza, że w tej partii jest remis, 1, że wygrał gracz nr 1, a 2 gracz nr 2.
Dla każdego zestawu danych kolejne litery od A do F oraz przyporządkowana im liczba oczek (między literą a liczbą oczek jest znak "-") lub napis "Brak jednoznacznej odpowiedzi" w przypadku, gdy nie da się jednoznacznie udzielić odpowiedzi.
Wejście: 2 6 A B C D 2 C D B F r A C B D r F A B E 1 D F C E 1 B C A C 2 6 A C E F r B E C F 1 A C E A 2 A E C C r A A F C r D D B E r Wyjście: Brak jednoznacznej odpowiedzi A-2 B-6 C-3 D-5 E-4 F-1
Wyjaśnienie
Dla pierwszego zestawu danych istnieją co najmniej dwa różne kombinacje jakie możemy przypisać do liter np.:
A-2 B-1 C-3 D-4 E-5 F-6 A-3 B-1 C-2 D-4 E-6 F-5
W drugim zestawie jest tylko jedno takie dopasowanie.
Najprostszym rozwiązaniem jest analiza wszystkich permutacji zbioru $$X= \{1, 2, 3, 4, 5, 6\}$$ , przyporządkowując dla każdej permutacji odpowiedniki literowe w kolejności $$el1 - A, el2 - B, .., el6 - F$$, gdzie $$el1, el2, ..., el6$$ to porządek liczb w danej permutacji:
Najpierw podstawiamy za litery zbiór $$\{1-A, 2-B, 3-C, 4-D, 5-E, 6-F\}$$. Następnie sprawdzamy całą partię. Jeśli coś nie będzie się zgadzać, przerywamy pętlę, w przeciwnym razie, permutujemy zbiór $$X$$ i tworzymy następne przyporządkowanie: $$\{1-A, 2-B, 3-C, 4-D, 6-E, 5-F\}$$. Czynności te powtarzamy do momentu otrzymania permutacji $$\{6, 5, 4, 3, 2, 1\}$$ lub sytuacji, gdy po raz drugi będzie się wszystko zgadzać - wtedy brak jednoznacznej odpowiedzi.
Jak łatwo zauważyć, dla danego zbioru jest $$6!=720$$ możliwości i tyle należy zbadać, aby stwierdzić, czy jest więcej niż jedno dopasowanie. Dobrym pomysłem, jest użycie funkcji $$nextpermutation$$ z języka C++ do permutowania zbioru $$X$$.
Oprócz takiego rozwiązania były zgłoszenia oparte na grafach oraz próby odgadnięcia wartości liter analizując przebieg partii.