#include <bits/stdc++.h>
using namespace std;
struct ball {
  double x;
  double v;
  double m;
  int id;
  ball(){};
  ball(double x, double v, double m, int id) : x(x), v(v), m(m), id(id){};
  bool operator<(const ball &a) const {
    if (x < a.x) return 1;
    return 0;
  }
};
int main(void) {
  int n, t;
  scanf("%d%d", &n, &t);
  vector<ball> B, _B;
  for (int i = 0; i < n; i++) {
    double x, v, m;
    scanf("%lf%lf%lf", &x, &v, &m);
    B.push_back(ball(x, v, m, i));
  }
  sort(B.begin(), B.end());
  _B.resize(n);
  double prev = 0;
  while (prev - t < -1e-9) {
    double tMin = t - prev;
    for (int i = 0; i < (int)B.size(); i++)
      for (int j = i + 1; j < (int)B.size(); j++) {
        if ((B[i].v * B[j].v) < 0) {
          double tmp = (B[j].x - B[i].x) / abs(B[j].v - B[i].v);
          if (tmp > 1e-9) tMin = min(tMin, tmp);
        } else {
          if (B[i].v > 0) {
            if (B[i].v > B[j].v) {
              double tmp = (B[j].x - B[i].x) / (B[i].v - B[j].v);
              if (tmp > 1e-9) tMin = min(tMin, tmp);
            }
          } else if (B[i].v < 0) {
            if (B[j].v < B[i].v) {
              double tmp = (B[j].x - B[i].x) / (B[i].v - B[j].v);
              if (tmp > 1e-9) tMin = min(tMin, tmp);
            }
          }
        }
      }
    for (int i = 0; i < n; i++) {
      B[i].x += B[i].v * tMin;
    }
    for (int i = 0; i < n - 1; i++)
      if (abs(B[i].x - B[i + 1].x) < 1e-9) {
        double v1 =
            ((B[i].m - B[i + 1].m) * B[i].v + 2 * B[i + 1].m * B[i + 1].v) /
            (B[i].m + B[i + 1].m);
        double v2 = ((B[i + 1].m - B[i].m) * B[i + 1].v + 2 * B[i].m * B[i].v) /
                    (B[i].m + B[i + 1].m);
        B[i].v = v1;
        B[i + 1].v = v2;
      }
    sort(B.begin(), B.end());
    prev += tMin;
  }
  vector<double> res;
  res.resize(n);
  for (int i = 0; i < n; i++) res[B[i].id] = B[i].x;
  for (int i = 0; i < res.size(); i++) printf("%.4lf\n", res[i]);
  return 0;
}
