#include <bits/stdc++.h>
using namespace std;
vector<vector<int> > tree;
struct Node {
  double x;
  double v;
  double m;
};
Node ball[12];
int main() {
  int n;
  double t;
  double tottime = 0;
  int i, j, k;
  scanf("%d %lf", &n, &t);
  for (i = 0; i < n; i++)
    scanf("%lf %lf %lf", &ball[i].x, &ball[i].v, &ball[i].m);
  while (1) {
    double curt;
    int ti, tj;
    double mint = 100000;
    for (i = 0; i < n; i++) {
      for (j = i + 1; j < n; j++) {
        if (fabs(ball[i].v - ball[j].v) < 1e-10)
          continue;
        else {
          curt = (ball[i].x - ball[j].x) / (ball[j].v - ball[i].v);
          if (curt > 1e-10 && curt - mint < 1e-10) {
            mint = curt;
            ti = i;
            tj = j;
          }
        }
      }
    }
    if (tottime + mint - t < 1e-10) {
      for (i = 0; i < n; i++) {
        ball[i].x = ball[i].x + mint * ball[i].v;
      }
      for (i = 0; i < n; i++) {
        for (j = i + 1; j < n; j++) {
          if (fabs(ball[i].x - ball[j].x) < 1e-10) {
            double v1 = ((ball[i].m - ball[j].m) * ball[i].v +
                         2 * ball[j].m * ball[j].v) /
                        (ball[i].m + ball[j].m);
            double v2 = ((ball[j].m - ball[i].m) * ball[j].v +
                         2 * ball[i].m * ball[i].v) /
                        (ball[i].m + ball[j].m);
            ball[i].v = v1;
            ball[j].v = v2;
          }
        }
      }
      tottime += mint;
    } else {
      double time_left = t - tottime;
      for (i = 0; i < n; i++) ball[i].x = ball[i].x + time_left * ball[i].v;
      break;
    }
  }
  for (i = 0; i < n; i++) printf("%.8lf\n", ball[i].x);
}
