#include <bits/stdc++.h>
using namespace std;
struct Ball {
  double x, v, m, index;
};
const int MAXN = 10;
int n;
double ending;
Ball balls[MAXN];
bool comp0(Ball a, Ball b) { return a.x < b.x; }
bool comp1(Ball a, Ball b) { return a.index < b.index; }
void MoveBall(int a, double t) {
  balls[a].x += balls[a].v * t;
  return;
}
bool WillCollide(int a, int b, double &rett) {
  if (balls[a].v > balls[b].v) {
    rett = (balls[b].x - balls[a].x) / (balls[a].v - balls[b].v);
    return true;
  }
  return false;
}
int FindCollision(double &dur) {
  double mint = DBL_MAX;
  double t;
  int mink;
  mink = -1;
  for (int i = 0; i < n - 1; i++)
    if (WillCollide(i, i + 1, t) && t < mint) mint = t, mink = i;
  dur = mint;
  return mink;
}
void Collide(int a, int b) {
  double v1, v2;
  double deltat = (balls[b].x - balls[a].x) / (balls[a].v - balls[b].v);
  v1 = ((balls[a].m - balls[b].m) * balls[a].v + 2 * balls[b].m * balls[b].v) /
       (balls[a].m + balls[b].m);
  v2 = ((balls[b].m - balls[a].m) * balls[b].v + 2 * balls[a].m * balls[a].v) /
       (balls[a].m + balls[b].m);
  MoveBall(a, deltat);
  MoveBall(b, deltat);
  balls[a].v = v1;
  balls[b].v = v2;
  return;
}
int main() {
  double nowt;
  scanf("%d%lf", &n, &ending);
  for (int i = 0; i < n; i++)
    scanf("%lf%lf%lf", &(balls[i].x), &(balls[i].v), &(balls[i].m)),
        balls[i].index = i;
  sort(balls, balls + n, comp0);
  nowt = 0;
  while (nowt < ending) {
    double t;
    int i = FindCollision(t);
    if (i < 0 || ending - nowt < t)
      break;
    else {
      Collide(i, i + 1);
      for (int j = 0; j < n; j++)
        if (j != i && j != i + 1) MoveBall(j, t);
      nowt += t;
    }
  }
  for (int i = 0; i < n; i++) MoveBall(i, ending - nowt);
  sort(balls, balls + n, comp1);
  for (int i = 0; i < n; i++) printf("%.9lf\n", balls[i].x);
  return 0;
}
