#include <iostream>
#include <vector>
using namespace std;

// Fitxer que calcula a partir d'un fitxer de resultats del programa mc-2 els
// valors de d<e>/dT amb derivació numèrica.

struct Row {
  long double T;
  long double E;
};

int main() {
  vector<Row> data;
  long double t; // Trash
  long double T;
  long double E;
  while (cin >> t >> T >> E >> t >> t >> t >> t >> t >> t >> t >> t) {
    Row r;
    r.T = T;
    r.E = E;
    data.push_back(r);
  }

  for (int i = 0; i < (int)data.size() - 1; ++i) {
    long double derivada = (data[i + 1].E - data[i].E)/(data[i + 1].T - data[i].T);
    cout << data[i].T << " " << derivada << endl;
  }
}
