#include <bits/stdc++.h>
using namespace std;
struct party {
  double x, v, m;
  int id;
} data[15];
bool cmp(party a, party b) { return a.x < b.x; }
bool cmp1(party a, party b) { return a.id < b.id; }
int N, times;
double getSpeed(int a, int b) {
  return ((data[a].m - data[b].m) * data[a].v + 2 * data[b].m * data[b].v) /
         (data[a].m + data[b].m);
}
double GetTime(int a, int b) {
  if (data[a].v < 0 && data[b].v < 0 && data[a].v > data[b].v) {
    double len = data[b].x - data[a].x;
    double v = data[a].v - data[b].v;
    return len / v;
  }
  if (data[a].v > 0 && data[b].v > 0 && data[a].v > data[b].v) {
    double len = data[b].x - data[a].x;
    double v = data[a].v - data[b].v;
    return len / v;
  }
  if (data[a].v >= 0 && data[b].v <= 0) {
    if (data[a].v == 0 && data[b].v == 0) return 10000;
    double len = data[b].x - data[a].x;
    double v = data[a].v - data[b].v;
    return len / v;
  }
  return 10000;
}
void fun(double P) {
  double nowtime = 10000;
  int a, b;
  for (int i = 1; i < N; i++) {
    double moment = GetTime(i - 1, i);
    if (moment < nowtime) {
      nowtime = moment;
      a = i - 1;
      b = i;
    }
  }
  if (nowtime + P >= times) {
    for (int i = 0; i < N; i++) data[i].x += data[i].v * (times - P);
    return;
  }
  data[a].x += nowtime * data[a].v;
  data[b].x += nowtime * data[b].v;
  double momenta = getSpeed(a, b);
  double momentb = getSpeed(b, a);
  data[a].v = momenta;
  data[b].v = momentb;
  for (int i = 0; i < N; i++) {
    if (i == a || i == b) continue;
    data[i].x += data[i].v * nowtime;
  }
  fun(P + nowtime);
}
int main() {
  while (scanf("%d%d", &N, &times) != EOF) {
    for (int i = 0; i < N; i++) {
      scanf("%lf%lf%lf", &data[i].x, &data[i].v, &data[i].m);
      data[i].id = i;
    }
    sort(data, data + N, cmp);
    fun(0);
    sort(data, data + N, cmp1);
    for (int i = 0; i < N; i++) printf("%.9f\n", data[i].x);
  }
  return 0;
}
