#include <bits/stdc++.h>
int cmp(const void *a, const void *b) {
  return (((float *)a)[1] - ((float *)b)[1]);
}
int comp(const void *a, const void *b) {
  return (((float *)a)[0] - ((float *)b)[0]);
}
typedef struct _arr {
  float sfix;
  float x;
  float v;
  float m;
} balls;
int main() {
  balls b[15];
  int n, t;
  int i, j, k;
  float tsum, dt, dtcal;
  int p1, p2;
  float m1, m2, v1, v2, v11, v22;
  int flag;
  float dm, sm, mv1, mv2;
  while ((scanf("%d%d", &n, &t)) != EOF) {
    for (i = 0; i < n; i++) {
      scanf("%f%f%f", &b[i].x, &b[i].v, &b[i].m);
      b[i].sfix = i;
    }
    qsort(b, n, sizeof(float) * 4, cmp);
    tsum = 0;
    while (tsum < t) {
      dt = 1000;
      for (i = 0; i < n - 1; i++) {
        if (b[i].v > b[i + 1].v) {
          dtcal = (b[i + 1].x - b[i].x) * 1.0 / (b[i].v - b[i + 1].v);
          if (dtcal < dt) {
            dt = dtcal;
            p1 = i;
            p2 = i + 1;
          }
        }
      }
      if (dt == 1000) break;
      if (dt + tsum > t) break;
      flag = 1;
      for (i = 0; i < 10; i++) {
        if (i == p1 || i == p2) {
          if (flag == 0) continue;
          b[p1].x = b[p1].x + b[p1].v * dt;
          b[p2].x = b[p1].x;
          m1 = b[p1].m;
          m2 = b[p2].m;
          v1 = b[p1].v;
          v2 = b[p2].v;
          dm = m1 - m2;
          sm = m1 + m2;
          mv1 = m1 * v1;
          mv2 = m2 * v2;
          v11 = ((m1 - m2) * v1 + 2 * m2 * v2) * 1.0 / (m1 + m2);
          v22 = ((m2 - m1) * v2 + 2 * m1 * v1) * 1.0 / (m1 + m2);
          b[p1].v = v11;
          b[p2].v = v22;
          flag = 0;
        } else {
          b[i].x = b[i].x + b[i].v * dt;
        }
      }
      tsum += dt;
    }
    dt = t - tsum;
    for (i = 0; i < n; i++) {
      b[i].x = b[i].x + b[i].v * dt;
    }
    qsort(b, n, sizeof(float) * 4, comp);
    for (i = 0; i < n; i++) {
      printf("%.10f\n", b[i].x);
    }
  }
}
