Problem description


3-SAT
(3-sat)
Limit pamięci: 96 MB
Limit czasu: 3.00 s

Jasio bardzo lubi problemy NP-trudne. Ostatnio zainteresował się problemem 3-SAT, w którym dana jest formuła logiczna będąca koniunkcją M klauzul, a każda klauzula jest alternatywą trzech literałów: każdy z nich jest jedną z N zmiennych logicznych lub zaprzeczeniem jednej z tych zmiennych. Przykładowa formuła 3-SAT pokazana jest poniżej:

(x1∨¬x2x4) ∧ (¬x1x2x3) ∧ (x2∨¬x3∨¬x4)

Zadanie polega na znalezieniu wartościowania zmiennych (tj. przypisania zmiennym wartości logicznych prawda lub fałsz), tak aby formuła była spełniona (jej wartością logiczną ma być prawda).

Napisz program, który: wczyta formułę problemu 3-SAT, wyznaczy wartościowanie spełniające (lub stwierdzi, że takie nie istnieje) i wypisze wynik na standardowe wyjście.

Wejście

W pierwszym wierszu znajdują się dwie liczby naturalne N oraz M, oddzielone pojedynczym odstępem i określające kolejno: liczbę zmiennych oraz liczbę klauzul formuły. W kolejnych M wierszach znajduje się opis kolejnych klauzul, po jednej w wierszu. Opis każdej klauzuli składa się z trzech liczb całkowitych Ai, Bi oraz Ci, pooddzielanych pojedynczymi odstępami, określających numery zmiennych występujących w i-tej klauzuli. Wartość dodatnia oznacza zmienną, zaś ujemna – negację zmiennej.

Wyjście

W pierwszym wierszu wyjścia należy wypisać słowo TAK, jeśli jest możliwe spełnienie formuły z wejścia. W takim przypadku w drugim wierszu wejścia powinien się znaleźć ciąg znaków długości N, i-ty znak tego ciągu ma być P jeśli i-ta zmienna powinna być prawdą, lub F w przeciwnym przypadku.

Jeśli nie jest możliwe spełnienie formuły z wejścia należy wypisać jedno słowo NIE. Jeśli istnieje wiele możliwych rozwiązań, należy wypisać dowolne z nich.

Ograniczenia

3 ≤ N ≤ 50 000, 1 ≤ M ≤ 500 000, 1 ≤ |Ai| < |Bi| < |Ci| ≤ N, |Ci| − |Ai| < 8.

Przykład

Wejście Wyjście Wyjaśnienie
4 3
1 -2 4
-1 2 3
2 -3 -4
TAK
PPPF

Przykład opisuje formułę z treści powyżej.