모빌

시간 제한1초메모리 제한128 MB

문제

Alabama Mobiles Inc.는 가볍고 움직이는 조형물인 모빌을 설계하고 제작한다. 모빌은 막대의 중심에 실을 묶어 매단 구조이며, 막대의 양 끝에는 각각 또 다른 실이 매달려 작은 장식물 하나 또는 더 작은 모빌을 지탱한다.

잘 설계된 모빌은 균형이 맞아야 한다. 즉 모든 막대가 자연스럽게 수평으로 매달리도록 막대 양쪽 끝에 걸린 무게가 같아야 한다. 모든 막대는 중심에 실이 묶여 있으므로, 어떤 막대는 그 왼쪽 끝에 매달린 전체 무게와 오른쪽 끝에 매달린 전체 무게가 같을 때 정확히 균형을 이룬다. 또한 각 막대가 자신을 지탱하는 실을 축으로 회전하더라도 다른 막대와 부딪히지 않도록 막대들의 길이를 정해야 한다.

모빌의 일부 설계도가 주어질 때, 이 모빌이 균형을 이룰 수 있는지, 그리고 균형을 이룬다면 막대들이 서로 부딪히지 않고 자유롭게 회전할 수 있는지 판정하는 프로그램을 작성하라.

막대와 실의 무게는 장식물의 무게에 비해 무시할 수 있고, 모든 연결 실의 길이는 같다고 가정한다. 모든 모빌에는 막대가 적어도 하나 있다.

입력

입력은 하나 이상의 모빌 설계 명세로 이루어진다. 한 명세 안에서 원소들은 1번부터 시작하여 1씩 증가하는 번호로 매겨진다.

각 원소는 한 줄에 하나씩 주어진다. 줄은 원소 번호로 시작하고, 이어서 막대를 뜻하는 문자 B 또는 장식물을 뜻하는 문자 D가 온다.

  • 막대(B)인 경우: 문자 B 다음에 막대의 길이를 나타내는 실수 하나가 오고, 이어서 막대의 두 끝에 매달린 원소들의 번호를 나타내는 정수 두 개가 온다. 가장 위의 막대를 제외한 모든 원소는 정확히 하나의 막대 끝에 매달린 것으로 나열된다.
  • 장식물(D)인 경우: 문자 D 다음에 그 무게를 나타내는 실수 하나가 오거나, 무게가 아직 정해지지 않았음을 뜻하는 문자 X가 온다. 각 명세에는 X 원소가 정확히 하나 있다.

한 줄 안의 항목들은 하나 이상의 공백으로 구분된다.

명세는 원소 번호 자리에 양수가 아닌 값이 오는 줄로 끝난다. 값이 0이면 현재 명세가 끝나고 뒤에 명세가 더 있음을 뜻하며, 음수이면 현재 명세가 끝나면서 입력 전체가 끝난다.

출력

각 모빌에 대해 한 줄 또는 두 줄을 출력한다.

첫 번째 줄은 다음 중 하나이다.

Object M must have weight NN

또는

The mobile cannot be balanced.

여기서 MX 원소의 번호이고, NN은 모빌 전체를 균형 잡히게 하는 무게로 소수점 아래 두 자리까지 출력한다. 어떤 양수 무게로도 모빌의 균형을 맞출 수 없을 때에만 두 번째 형태를 출력한다.

모빌의 균형을 맞출 수 있으면 두 번째 줄로 다음 중 하나를 출력한다.

The mobile will swing freely.

또는

The mobile will not swing freely.

이는 막대들이 실을 축으로 어떻게 회전하더라도 모든 막대 쌍이 양의 거리만큼 떨어져 있는지 여부에 따라 결정된다.