XXVI Olimpíada Brasileira de Informática
Submeta sua solução

Nome do arquivo: compensacao.x, onde x deve ser c, cpp, java, js ou py

Câmara de Compensação

(Esta tarefa necessita de um corretor especial, que não está disponível na seção Pratique no momento. A correção será feita apenas para a Tarefa B, valendo 100 pontos.)

Em uma cidade, muitas pessoas emprestam dinheiro para outras pessoas. A coisa chegou a um tal ponto que tem gente que é ao mesmo tempo devedor e credor. As pessoas resolveram então pagar suas dívidas e cada uma emitiu os cheques para pagar suas dívidas. Por exemplo, na figura, item~(a), a pessoa C emitiu um cheque de 5 dinheiros para a pessoa A, e a pessoa D emitiu um cheque de 3 dinheiros para a pessoa C. Ou seja, a pessoa C recebeu da pessoa D e pagou a pessoa~A. Pior ainda, existe um ciclo vicioso, em que a pessoa D emitiu um cheque de 3 dinheiros para a pessoa~C, que por sua vez emitiu um cheque de 2 dinheiros para a pessoa B, que por sua vez emitiu um cheque de 1 dinheiro para a pessoa D. A situação mostrada no item (a) da Figura abaixo é descrita através de uma lista de cheques, com quatro triplas da forma (X,V,Y), para indicar que X emitiu um cheque de V dinheiros para Y. Na mesma Figura, no item (b), a situação é descrita com uma lista de apenas três cheques.

Entretanto, as duas listas são equivalentes: o saldo na conta bancária de uma pessoa é o mesmo em ambas as listas de cheques. Em ambos os casos, completada a compensação de todos os cheques, a pessoa A terminará com 5 dinheiros a mais na sua conta, a pessoa B terminará com 1 dinheiro a mais na sua conta, a pessoa C terminará com 4 dinheiros a menos na sua conta e a pessoa D terminará com 2 dinheiros a menos na sua conta.

Vamos então definir equivalência de listas de cheques emitidos: duas listas de cheques são equivalentes se, ao final do processo de compensação de todos os cheques, o seguinte vale para cada pessoa: seu saldo bancário ao final da compensação de uma lista é o mesmo que o saldo bancário da pessoa ao final da compensação da outra lista.

O total de valores compensados no item (a) da figura é igual a 11 dinheiros ao passo que no item (b) o total é de apenas 6 dinheiros!

Este problema tem duas subtarefas:

  • Subtarefa A: determinar, dada uma lista de cheques, se é possível ou não diminuir o total de valores compensados utilizando uma outra lista de cheques equivalente.
  • Subtarefa B: determinar o total mínimo de valores compensados em uma lista de cheques equivalente.

Você deve escrever um programa que resolva apenas a Subtarefa A ou que resolva as duas subtarefas.

Entrada

A primeira linha contém dois inteiros, M e N, onde M é o número de cheques emitidos e N é o número de habitantes da cidade. Os habitantes são identificados por números inteiros de 1 a N. Cada uma das M linhas seguintes descreve um cheque da lista e contém três inteiros X, V e Y, que indica que X emitiu um cheque de V dinheiros a favor de Y. É possível que haja mais de um cheque de X a Y. Também é possivel que haja cheques de X a Y e de Y a X, mas não de X a X.

Saída

Seu programa deve produzir duas linhas na saída. A primeira linha descreve a resposta para a Subtarefa A e deve conter um único caractere. O caractere deve ser S para indicar que é possível diminuir o total dos cheques compensados com uma lista de cheques equivalente, ou N para indicar que não é possível diminuir o total de cheques compensados.

Se o seu programa resolve também a Subtarefa B, a segunda linha descreve a resposta para essa subtarefa e deve conter um número inteiro, o valor mínimo do total de cheques compensados, em uma lista equivalente. Se o seu programa não resolve a Subtarefa B, você pode deixar a linha em branco ou colocar um valor inteiro arbitrário.

Restrições

  • 1 ≤ M ≤ 106
  • 2 ≤ N ≤ 103
  • 1 ≤ X ≤ N, 1 ≤ Y ≤ N, X ≠ Y
  • 1 ≤ V ≤ 102

Informações sobre a pontuação

  • Subtarefa A: 20 pontos.
  • Subtarefa B: em um conjunto de casos de testes que vale 20 pontos 1 ≤ N ≤ 10.

Exemplos

Entrada
4 4
2 1 4
3 5 1
3 2 2
4 3 3
Saída
S
6
	

 

Entrada
5 4
4 50 3
2 25 1
3 10 2
2 100 1
4 50 3
Saída
S
215
	

 

Entrada
4 4
3 10 1
2 40 1
2 30 4
2 20 4
Saída
N
100
	

 

Tarefas Programação Nível 2
Promoção:
sbc
Patrocínio
 
Apoio
 
Coordenação