#include <bits/stdc++.h>
using namespace std;
const int INF = 2147483647;
const double PI = 3.141592653589793;
int kol[15], n, t, i, k1, k2;
set<pair<double, pair<int, int> > > zbior;
double v[15], x[15], r, tim, nv1, nv2, m[15];
bool cmp(int a, int b) { return x[a] < x[b]; }
int main() {
  scanf("%d %d", &n, &t);
  for (i = 0; i < n; i++) {
    scanf("%lf %lf %lf", &x[i], &v[i], &m[i]);
    kol[i] = i;
  }
  sort(kol, kol + n, cmp);
  tim = 0.0;
  while (1) {
    zbior.clear();
    for (i = 0; i < n - 1; i++) {
      k1 = kol[i];
      k2 = kol[i + 1];
      if (v[k1] < 0 && v[k2] > 0) continue;
      if (v[k1] > 0 && v[k2] > v[k1]) continue;
      if (v[k2] < 0 && v[k1] < v[k2]) continue;
      zbior.insert(pair<double, pair<int, int> >(
          abs(x[k1] - x[k2]) / abs(v[k1] - v[k2]), pair<int, int>(k1, k2)));
    }
    if (zbior.size() == 0) break;
    r = (*zbior.begin()).first;
    if (tim + r > t) break;
    k1 = (*zbior.begin()).second.first;
    k2 = (*zbior.begin()).second.second;
    for (i = 0; i < n; i++) x[i] += v[i] * r;
    nv1 = ((m[k1] - m[k2]) * v[k1] + 2 * m[k2] * v[k2]) / (m[k1] + m[k2]);
    nv2 = ((m[k2] - m[k1]) * v[k2] + 2 * m[k1] * v[k1]) / (m[k1] + m[k2]);
    v[k1] = nv1;
    v[k2] = nv2;
    tim += r;
  }
  r = t - tim;
  for (i = 0; i < n; i++) x[i] += v[i] * r;
  for (i = 0; i < n; i++) printf("%.8lf\n", x[i]);
  return 0;
}
