#include <bits/stdc++.h>
const int maxN = 20;
using namespace std;
struct bila {
  double x, v, m;
  int poz;
};
int N, T, poz;
bila v[maxN];
double d1, d2, d, t, t_curr, t_next;
double rez[maxN], unde;
inline bool cmp(bila a, bila b) {
  if (a.x < b.x) return true;
  return false;
}
int main() {
  int i;
  scanf("%d%d", &N, &T);
  for (i = 1; i <= N; i++) {
    scanf("%lf%lf%lf", &v[i].x, &v[i].v, &v[i].m);
    v[i].poz = i;
  }
  sort(v + 1, v + N + 1, cmp);
  t_curr = 0;
  while (1) {
    t_next = 200000000;
    for (i = 1; i < N; i++)
      if (v[i].v > v[i + 1].v) {
        t = (v[i + 1].x - v[i].x) / (v[i + 1].v - v[i].v);
        if (t < 0) t = -t;
        if (t + t_curr < t_next) {
          poz = i;
          t_next = t + t_curr;
          unde = v[i].x + v[i].v * t;
        }
      }
    if (t_next > T) {
      t = T - t_curr;
      for (i = 1; i <= N; i++) {
        v[i].x = v[i].x + v[i].v * t;
      }
      break;
    } else {
      t = t_next - t_curr;
      for (i = 1; i <= N; i++) {
        if (i == poz + 1) continue;
        if (i != poz && i != poz + 1)
          v[i].x = v[i].x + v[i].v * t;
        else {
          double v1 = v[i].v, v2 = v[i + 1].v;
          double m1 = v[i].m, m2 = v[i + 1].m;
          v[i].x = v[i].x + t * v[i].v;
          v[i + 1].x = v[i + 1].x + t * v[i + 1].v;
          v[i].v = ((m1 - m2) * v1 + 2 * m2 * v2) / (m1 + m2);
          v[i + 1].v = ((m2 - m1) * v2 + 2 * m1 * v1) / (m1 + m2);
          i++;
        }
      }
    }
    t_curr = t_next;
  }
  for (i = 1; i <= N; i++) rez[v[i].poz] = v[i].x;
  for (i = 1; i <= N; i++) printf("%.9lf\n", rez[i]);
  return 0;
}
