#include <bits/stdc++.h>
using namespace std;
struct ball {
  int i;
  int m;
  double v;
  double x;
  bool operator<(const ball &a) const { return x < a.x; }
} B[11];
bool cmp(ball a, ball b) { return a.i < b.i; }
inline double Abs(double a) {
  if (a < 0) a *= -1;
  return a;
}
int main() {
  int n;
  double t;
  scanf("%d%lf", &n, &t);
  for (int i = 0; i < n; i++) {
    scanf("%lf%lf%d", &B[i].x, &B[i].v, &B[i].m);
    B[i].i = i;
  }
  sort(B, B + n);
  double costtime, nowcost;
  int one;
  while (t > 1e-9) {
    nowcost = 1000000000;
    for (int i = 1; i < n; i++) {
      if (Abs(B[i].x - B[i - 1].x) > 1e-9 && Abs(B[i].v - B[i - 1].v) > 1e-9) {
        costtime = (B[i].x - B[i - 1].x) / (B[i - 1].v - B[i].v);
        if (costtime > 0 && nowcost > costtime) {
          nowcost = costtime;
        }
      }
    }
    if (t <= nowcost) {
      for (int i = 0; i < n; i++) {
        B[i].x += B[i].v * t;
      }
      break;
    }
    for (int i = 0; i < n; i++) {
      B[i].x += B[i].v * nowcost;
    }
    for (int one = 1; one < n; one++) {
      if (Abs(B[one - 1].x - B[one].x) > 1e-9) continue;
      double v1 = B[one].v, v2 = B[one - 1].v;
      B[one].v = (B[one].m - B[one - 1].m) * v1 + 2 * B[one - 1].m * v2;
      B[one].v /= (B[one].m + B[one - 1].m);
      B[one - 1].v = (B[one - 1].m - B[one].m) * v2 + 2 * B[one].m * v1;
      B[one - 1].v /= (B[one].m + B[one - 1].m);
    }
    t -= nowcost;
  }
  sort(B, B + n, cmp);
  for (int i = 0; i < n; i++) printf("%.9lf\n", B[i].x);
  return 0;
}
