#include <bits/stdc++.h>
double min(double a, double b) { return a < b - 1e-9 ? a : b; }
struct biluta {
  double x, v, m;
  biluta(double iX = 0, double iV = 0, double iM = 1) : x(iX), v(iV), m(iM) {}
  void citire() { scanf("%lf%lf%lf", &x, &v, &m); }
};
biluta ZN[100], tmp[100];
double tictac(int i, int j) {
  if (fabs(ZN[i].v - ZN[j].v) < 1e-9 ||
      (ZN[i].x - ZN[j].x) / (ZN[i].v - ZN[j].v) > 1e-9)
    return 2000000000;
  return (ZN[i].x - ZN[j].x) / (ZN[i].v - ZN[j].v);
}
void backup(int i, int j) {
  biluta a1 = ZN[i], a2 = ZN[j];
  ZN[i].v = ((a1.m - a2.m) * a1.v + 2 * a2.m * a2.v) / (a1.m + a2.m);
  ZN[j].v = ((a2.m - a1.m) * a2.v + 2 * a1.m * a1.v) / (a1.m + a2.m);
}
void copiere(biluta *tmp, biluta *ZN, int n) {
  for (int i = 0; i < n; ++i) tmp[i] = ZN[i];
}
int main() {
  int n;
  double t, time = 0;
  scanf("%d%lf", &n, &t);
  for (int i = 0; i < n; ++i) ZN[i].citire();
  while (time < t) {
    double timpmin = 2000000000;
    for (int i = 0; i < n; ++i)
      for (int j = i + 1; j < n; ++j)
        timpmin = min(timpmin, fabs(tictac(i, j)));
    if (timpmin == 2000000000 || time + timpmin >= t - 1e-9) {
      time = t - time;
      for (int i = 0; i < n; ++i) ZN[i].x += time * ZN[i].v;
      break;
    }
    copiere(tmp, ZN, n);
    for (int i = 0; i < n; ++i) ZN[i].x += timpmin * ZN[i].v;
    for (int i = 0; i < n; ++i)
      for (int j = i + 1; j < n; ++j)
        if (fabs(tmp[i].x + tmp[i].v * timpmin - tmp[j].x -
                 tmp[j].v * timpmin) < 1e-9)
          backup(i, j);
    for (int i = 0; i < n; ++i) ZN[i].x += 1e-9 * 100 * ZN[i].v;
    time += timpmin;
  }
  for (int i = 0; i < n; ++i) printf("%lf ", ZN[i].x);
  return 0;
}
