#include <bits/stdc++.h>
using namespace std;
int const N = 101;
struct ball {
  double x, v, m;
  int pos;
  bool operator<(const ball other) const { return x < other.x; }
};
void solvetask() {
  int n, t;
  cin >> n >> t;
  vector<ball> a(n);
  for (int i = 0; i < n; i++) {
    double x, v, m;
    cin >> x >> v >> m;
    a[i] = {x, v, m, i};
  }
  vector<double> x(n), v(n), m(n);
  sort(a.begin(), a.end());
  for (int i = 0; i < n; i++) {
    x[i] = a[i].x;
    v[i] = a[i].v;
    m[i] = a[i].m;
  }
  cout.precision(12);
  double cur = 0;
  while (cur < t) {
    int pos = -1;
    double best = -1;
    for (int i = 1; i < n; i++) {
      if (fabs(x[i] - x[i - 1]) <= 1e-6) {
        if (v[i - 1] < 0 && v[i] > 0) continue;
        if (v[i - 1] > 0 && v[i] > 0 && v[i] > v[i - 1]) continue;
        if (v[i - 1] < 0 && v[i] < 0 && v[i] > v[i - 1]) continue;
        pos = i;
        best = 0;
        break;
      }
      if ((fabs(v[i] - v[i - 1]) <= 1e-6) &&
          ((v[i] >= 0 && v[i - 1] >= 0) || (v[i] <= 0 && v[i - 1] <= 0)))
        continue;
      double temp = (x[i - 1] - x[i]) / (v[i] - v[i - 1]);
      if (temp < 0) continue;
      if (pos == -1 || best > temp) {
        pos = i;
        best = temp;
      }
    }
    if (pos == -1 || best + cur >= t) {
      break;
    }
    for (int i = 0; i < n; i++) {
      x[i] += v[i] * best;
    }
    double v1 = v[pos - 1], v2 = v[pos], m1 = m[pos - 1], m2 = m[pos];
    v[pos - 1] = ((m1 - m2) * v1 + 2 * m2 * v2) / (m1 + m2);
    v[pos] = ((m2 - m1) * v2 + 2 * m1 * v1) / (m1 + m2);
    cur += best;
  }
  vector<double> ans(n);
  for (int i = 0; i < n; i++) ans[a[i].pos] = x[i] + v[i] * (t - cur);
  for (int i = 0; i < n; i++) cout << fixed << ans[i] << '\n';
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  int t = 1;
  while (t--) solvetask();
}
