#include <bits/stdc++.h>
using namespace std;
struct Ball {
  int i;
  double x, v, m;
};
bool cmp_x(const Ball &a, const Ball &b) { return a.x < b.x; }
bool cmp_i(const Ball &a, const Ball &b) { return a.i < b.i; }
static void collide(Ball &a, Ball &b) {
  double av = ((a.m - b.m) * a.v + 2 * b.m * b.v) / (a.m + b.m);
  double bv = ((b.m - a.m) * b.v + 2 * a.m * a.v) / (a.m + b.m);
  a.v = av;
  b.v = bv;
}
int main() {
  int N, T;
  cin >> N >> T;
  vector<Ball> B(N);
  for (int n = 0; n < int(N); ++n) B[n].i = n;
  for (int n = 0; n < int(N); ++n) cin >> B[n].x >> B[n].v >> B[n].m;
  sort(B.begin(), B.end(), cmp_x);
  double t = 0;
  while (t < T) {
    int next_i = -1;
    double next_t = T;
    for (int i = 0; i < int(N - 1); ++i) {
      double d = B[i + 1].x - B[i].x;
      double v = B[i].v - B[i + 1].v;
      if (v > 0) {
        double ct = t + d / v;
        if (ct < next_t) {
          next_t = ct;
          next_i = i;
        }
      }
    }
    for (int i = 0; i < int(N); ++i) B[i].x += B[i].v * (next_t - t);
    t = next_t;
    if (next_i >= 0) collide(B[next_i], B[next_i + 1]);
  }
  sort(B.begin(), B.end(), cmp_i);
  for (int n = 0; n < int(N); ++n)
    cout << fixed << setprecision(9) << B[n].x << '\n';
}
