#include <bits/stdc++.h>
using namespace std;
double x[111], v[111], m[111];
int pos[111];
vector<pair<double, pair<int, int> > > V;
bool cmp(int a, int b) { return x[a] < x[b]; }
int main() {
  int n;
  double t;
  cin >> n >> t;
  for (int i = 0; i < n; i++) cin >> x[i] >> v[i] >> m[i], pos[i] = i;
  double curr = 0.0;
  sort(pos, pos + n, cmp);
  while (1) {
    V.clear();
    for (int i = 0; i < n - 1; i++) {
      int p1 = pos[i], p2 = pos[i + 1];
      if (v[p1] < 0 && v[p2] > 0) continue;
      if (v[p1] > 0 && v[p1] < v[p2]) continue;
      if (v[p2] < 0 && v[p1] < v[p2]) continue;
      double dis = x[p1] - x[p2];
      double speed = v[p1] - v[p2];
      double req_time = dis / speed;
      if (req_time < 0.0) req_time = -req_time;
      V.push_back(make_pair(req_time, make_pair(p1, p2)));
    }
    if (V.size() == 0) break;
    sort(V.begin(), V.end());
    double min_time = V[0].first;
    if (curr + min_time > t) break;
    for (int i = 0; i < n; i++) x[i] += v[i] * min_time;
    int p1 = V[0].second.first, p2 = V[0].second.second;
    double v1 =
        ((m[p1] - m[p2]) * v[p1] + 2.0 * m[p2] * v[p2]) / (m[p1] + m[p2]);
    double v2 =
        ((m[p2] - m[p1]) * v[p2] + 2.0 * m[p1] * v[p1]) / (m[p1] + m[p2]);
    v[p1] = v1;
    v[p2] = v2;
    curr += min_time;
  }
  double rem = t - curr;
  for (int i = 0; i < n; i++) {
    x[i] += v[i] * rem;
    printf("%.8lf\n", x[i]);
  }
  return 0;
}
