#include <bits/stdc++.h>
using namespace std;
class sphere {
 public:
  double x, v, m;
  int n;
  sphere() { x = v = m = n = 0; }
  sphere(double _x, double _v, double _m, int _n) {
    x = _x;
    v = _v;
    m = _m;
    n = _n;
  }
};
bool ud(sphere s1, sphere s2) {
  if (s1.x != s2.x) return s1.x < s2.x;
  return s1.v < s2.v;
}
bool un(sphere s1, sphere s2) { return s1.n < s2.n; }
sphere s[10];
double tr[9];
int main() {
  int n, ts;
  scanf("%d%d", &n, &ts);
  double t = ts;
  for (int i = 0; i < n; i++) {
    scanf("%lf%lf%lf", &s[i].x, &s[i].v, &s[i].m);
    s[i].n = i;
  }
  double m, v, v1, v2;
  while (t > 0) {
    sort(s, s + n, ud);
    m = INT_MAX;
    for (int i = 0; i < n - 1; i++) {
      v = (s[i].v - s[i + 1].v);
      if (v != 0 && s[i + 1].x != s[i].x)
        tr[i] = (s[i + 1].x - s[i].x) / v;
      else
        tr[i] = INT_MAX;
      if (tr[i] < 0) tr[i] = INT_MAX;
      if (tr[i] > 0 && m > tr[i]) m = tr[i];
    }
    m = min(m, t);
    for (int i = 0; i < n - 1; i++) {
      if (tr[i] > m) {
        s[i].x += s[i].v * m;
      } else {
        s[i + 1].x = s[i].x += s[i].v * m;
        v1 = s[i].v;
        v2 = s[i + 1].v;
        s[i].v = ((s[i].m - s[i + 1].m) * v1 + 2.0 * s[i + 1].m * v2) /
                 (s[i].m + s[i + 1].m);
        s[i + 1].v = ((s[i + 1].m - s[i].m) * v2 + 2.0 * s[i].m * v1) /
                     (s[i].m + s[i + 1].m);
        i++;
      }
    }
    if (tr[n - 2] > m) {
      s[n - 1].x += s[n - 1].v * m;
    }
    t -= m;
  }
  sort(s, s + n, un);
  for (int i = 0; i < n; i++) printf("%f\n", s[i].x);
  return 0;
}
