마지막 단이 분리된 높이

아직 제출이 없습니다시간 제한1초메모리 제한256 MB

문제

2006년 가을 USC 공과대학은 공학 100주년을 기념했고, 그때 열린 대회의 이름이 100 Years of Engineering이었다. 이 문제는 그 대회의 항공우주공학과 기계공학 문제다. 로켓을 만들어 쏘아 올렸다면, 다시 떨어지기 전에 얼마나 높이 올라가는지 알고 싶어진다.

로켓은 nn개의 단으로 이루어져 있고, 각 단은 연료 탱크다. 단 iitit_i초 동안 연소하면서 추력 FiF_i를 내고, 연료가 떨어지는 순간 분리되어 버려진다. 마지막 단까지 버리고 나면 로켓은 더 이상 가속하지 못한다.

로켓 본체의 질량은 MM킬로그램이다. 즉 모든 단을 버리고 남는 질량이 MM이다. 단 ii의 질량은 mim_i이고, 연료 자체의 질량은 0으로 본다. 그래서 처음 로켓의 질량은 M+imiM + \sum_i m_i이고, 단 ii가 연소하는 동안의 질량은 M+mi+mi+1++mnM + m_i + m_{i+1} + \cdots + m_n이다. 이미 분리한 단은 무게에서 빠진다.

로켓은 똑바로 위로 발사되고, 처음 속도는 0m/s다. 바람, 마찰, 지구 중력장 이탈 같은 효과는 모두 무시한다.

필요한 물리 공식은 세 가지다.

  1. 질량이 mm인 물체에 힘 FF가 작용하면 가속도는 a=F/ma = F/m이다.
  2. 지구 중력장 안에서 모든 물체는 지구 쪽으로 g=9.81 m/s2g = 9.81\ \mathrm{m/s^2}의 일정한 가속도를 받는다.
  3. 속도 vv로 움직이는 물체가 가속도 aatt초 동안 움직이면 이동 거리는 vt+12at2vt + \frac{1}{2}at^2이고, tt초 뒤의 속도는 v+atv + at이다.

따라서 단 ii가 연소하는 동안 로켓의 위쪽 방향 가속도는 Fi/mgF_i/m - g로 일정하다. 여기서 mm은 그 연소 구간에서의 로켓 질량이다. 이 값이 음수이면 로켓은 감속하거나 아래로 내려온다.

단은 1,2,,n1, 2, \dots, n 순서로 쓰고 버린다. 마지막 단이 떨어져 나가는 순간 로켓이 있던 높이를 구한다. 입력은 항상 로켓이 이륙하고, 마지막 단을 버리기 전에는 지면에 부딪히지 않도록 주어진다.

입력

첫 줄에 데이터 세트의 개수 K1K \ge 1이 주어진다. 이어서 KK개의 데이터 세트가 다음 형식으로 주어진다.

각 데이터 세트의 첫 줄에는 단의 개수 nn과 로켓 본체의 질량 MM이 주어진다. nn1n301 \le n \le 30인 정수이고, MM0.01M1,000,0000.01 \le M \le 1{,}000{,}000인 실수다.

다음 nn개의 줄에는 각각 세 실수 mim_i, tit_i, FiF_i가 주어지며, 셋 다 0.010.01 이상 1,000,0001{,}000{,}000 이하다. mim_i는 단 ii의 질량(kg), tit_i는 연소 시간(초), FiF_i는 그동안 내는 추력이고 단위는 kgm/s2\mathrm{kg\,m/s^2}이다.

출력

각 데이터 세트마다 먼저 Data Set x:를 한 줄에 출력한다. xx는 데이터 세트의 번호로 1부터 센다. 다음 줄에 마지막 단이 떨어져 나갔을 때 로켓의 높이를 소수점 아래 둘째 자리까지 반올림해서 출력한다.

각 데이터 세트 뒤에는 빈 줄을 하나 출력한다.