#include <bits/stdc++.h>
using namespace std;
struct Point {
  double x, v;
  int m, n;
  bool operator<(const Point &p2) const { return x < p2.x; }
};
double col(Point &p1, Point &p2) {
  double dv = p1.v - p2.v;
  return dv < 1e-9 ? 100 : (p2.x - p1.x) / dv;
}
void ntstate(Point pts[], int n, double dt) {
  for (int i = 0; i < n; i++) pts[i].x += pts[i].v * dt;
}
void newv(Point &pt1, Point &pt2) {
  double m1pm2 = pt1.m + pt2.m;
  double m1sm2 = pt1.m - pt2.m;
  double m1v1 = 2 * pt1.m * pt1.v;
  double m2v2 = 2 * pt2.m * pt2.v;
  pt1.v = (m1sm2 * pt1.v + m2v2) / m1pm2;
  pt2.v = (-m1sm2 * pt2.v + m1v1) / m1pm2;
}
int main() {
  int n, t;
  cin >> n >> t;
  Point pts[n], *cpt1, *cpt2;
  for (int i = 0; i < n; i++) {
    pts[i].n = i;
    cin >> pts[i].x >> pts[i].v >> pts[i].m;
  }
  sort(pts, pts + n);
  double nt = 0, tt;
  while (true) {
    double dt = 100;
    for (int i = 1; i < n; i++) {
      tt = col(pts[i - 1], pts[i]);
      if (tt < dt && tt > 0) dt = tt;
    }
    if (dt + nt >= t) {
      dt = t - nt;
      ntstate(pts, n, dt);
      break;
    } else {
      nt += dt;
      ntstate(pts, n, dt);
      for (int i = 1; i < n; i++)
        if (pts[i].x - pts[i - 1].x < 1e-9) newv(pts[i - 1], pts[i]);
    }
  }
  double rtn[n];
  for (int i = 0; i < n; i++) rtn[pts[i].n] = pts[i].x;
  for (int i = 0; i < n; i++) cout << rtn[i] << endl;
  return 0;
}
