#include <bits/stdc++.h>
#pragma GCC optimize("O3")
using namespace std;
struct ball {
  double x, v, m;
  int idx;
  bool operator<(const ball &t) const { return x < t.x; }
};
int n, t;
vector<ball> v;
void read() {
  cin >> n >> t;
  for (int i = 1; i <= n; i++) {
    double x, ve, m;
    cin >> x >> ve >> m;
    v.push_back({x, ve, m, i});
  }
}
const double inf = 1 / .0;
const double eps = 1e-6;
double collide_time(ball a, ball b) {
  if (a.v == b.v) return 1 / .0;
  return (b.x - a.x) / (a.v - b.v);
}
double ans[13];
void solve() {
  double last = 0;
  for (;;) {
    sort(v.begin(), v.end());
    double best_time = inf;
    vector<int> idx;
    for (int i = 0; i < n - 1; i++)
      if (collide_time(v[i], v[i + 1]) > eps) {
        if (collide_time(v[i], v[i + 1]) < best_time - eps)
          best_time = collide_time(v[i], v[i + 1]), idx.clear();
        if (fabs(collide_time(v[i], v[i + 1]) - best_time) < eps)
          idx.push_back(i);
      }
    if (best_time + last > t) break;
    for (int i = 0; i < n; i++) v[i].x += best_time * v[i].v;
    for (auto i : idx) {
      double v1 = v[i].v, v2 = v[i + 1].v;
      v[i].v = ((v[i].m - v[i + 1].m) * v1 + 2.0 * v[i + 1].m * v2) /
               (v[i].m + v[i + 1].m);
      v[i + 1].v = ((v[i + 1].m - v[i].m) * v2 + 2.0 * v[i].m * v1) /
                   (v[i].m + v[i + 1].m);
    }
    last += best_time;
  }
  for (auto i : v) ans[i.idx] = i.x + (t - last) * i.v;
  for (int i = 1; i <= n; i++) {
    cout << fixed;
    cout << setprecision(12) << ans[i] << '\n';
  }
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(nullptr);
  cout.tie(nullptr);
  read();
  solve();
}
