#include <iostream>
#include <vector>
#include <map>
#include <string>
using namespace std;
const unsigned F = 0, I = 1, L = 2, N = 3, T = 4;
bool die(const string & msg) {
cout << "Fatal Error:" << msg << endl;
exit(EXIT_FAILURE);
}
void filnt(vector<double> & v) {
v[T] = v[F];
for (double i = (v[F] + v[I]); i <= (v[L] + v[I]); i += v[I]) {
v[T] += i;
}
cout << "T:" << v[T] << " ";
v[N] = (2 * v[T]) / (v[F] + v[L]);
cout << "N:" << v[N] << endl;
}
void finlt(vector<double> & v) {
v[L] = v[F];
for (double i = 1; i < v[N]; i++) {
v[L] += v[I];
}
cout << "L:" << v[L] << " ";
v[T] = v[F];
for (double i = (v[F] + v[I]); i <= (v[L]); i += v[I]) {
v[T] += i;
}
cout << "T:" << v[T] << endl;
}
void fitln(vector<double> &) {
die("not checking this condition");
}
void flnit(vector<double> & v) {
v[I] = (v[L] - v[F]) / (v[N] - 1);
cout << "I:" << v[I] << " ";
v[T] = v[F];
for (double i = (v[F] + v[I]); i <= (v[L] + v[I]); i += v[I]) {
v[T] += i;
}
cout << "T:" << v[T] << endl;
}
void fltin(vector<double> & v) {
v[N] = (2 * v[T]) / (v[F] + v[L]);
cout << "N:" << v[N] << " ";
v[I] = (v[L] - v[F]) / (v[N] - 1);
cout << "I:" << v[I] << endl;
}
void ftnil(vector<double> & v) {
v[L] = ((2 * v[T]) / v[N]) - v[F];
cout << "L:" << v[L] << " ";
v[I] = (v[L] - v[F]) / (v[N] - 1);
cout << "I:" << v[I] << endl;
}
void iltfn(vector<double> &) {
die("not checking this condition");
}
void ilnft(vector<double> & v) {
v[F] = v[L];
for (double i = 1; i < v[N]; i++) {
v[F] -= v[I];
}
cout << "F:" << v[F] << " ";
v[T] = v[F];
for (double i = (v[F] + v[I]); i <= (v[L]); i += v[I]) {
v[T] += i;
}
cout << "T:" << v[T] << endl;
}
void itnfl(vector<double> & v) {
v[F] = ((v[T] * (2 / v[N])) - ((v[N] - 1)*v[I])) / 2;
cout << "F:" << v[F] << " ";
v[L] = ((2 * v[T]) / v[N]) - v[F];
cout << "L:" << v[L] << endl;
}
void lntfi(vector<double> & v) {
v[F] = ((2 * v[T]) / v[N]) - v[L];
cout << "F:" << v[F] << " ";
v[I] = (v[L] - v[F]) / (v[N] - 1);
cout << "I:" << v[I] << endl;
}
void assign(std::vector<double>& v, std::vector<bool>& flags, char c, double value)
{
switch (c)
{
case 'F': case 'f': v[F] = value; flags[F] = true; break;
case 'I': case 'i': v[I] = value; flags[I] = true; break;
case 'L': case 'l': v[L] = value; flags[L] = true; break;
case 'N': case 'n': v[N] = value; flags[N] = true; break;
case 'T': case 't': v[T] = value; flags[T] = true; break;
}
}
int main()
{
vector<double> v(5);
vector<bool> flags = { false, false, false, false, false };
for (int i = 0; i != 3; ++i) {
char c;
double value;
std::cin >> c >> value;
assign(v, flags, c, value);
}
const std::map<std::vector<bool>, void(*)(std::vector<double> &)> m = {
{{true, true, true, false, false}, filnt},
{{true, true, false, true, false}, finlt},
{{true, false, true, true, false}, flnit},
{{true, false, true, false, true}, fltin},
{{true, false, false, true, true}, ftnil},
{{false, true, true, true, false}, ilnft},
{{false, true, false, true, true}, itnfl},
{{false, false, true, true, true}, lntfi}
};
auto it = m.find(flags);
if (it == m.end()) {
std::cout << "Fatal Error: not checking this condition\n";
return EXIT_FAILURE;
}
it->second(v);
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8bWFwPgojaW5jbHVkZSA8c3RyaW5nPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKY29uc3QgdW5zaWduZWQgRiA9IDAsIEkgPSAxLCBMID0gMiwgTiA9IDMsIFQgPSA0OwoKYm9vbCBkaWUoY29uc3Qgc3RyaW5nICYgbXNnKSB7CiAgICBjb3V0IDw8ICJGYXRhbCBFcnJvcjoiIDw8IG1zZyA8PCBlbmRsOwogICAgZXhpdChFWElUX0ZBSUxVUkUpOwp9Cgp2b2lkIGZpbG50KHZlY3Rvcjxkb3VibGU+ICYgdikgewogICAgdltUXSA9IHZbRl07CiAgICBmb3IgKGRvdWJsZSBpID0gKHZbRl0gKyB2W0ldKTsgaSA8PSAodltMXSArIHZbSV0pOyBpICs9IHZbSV0pIHsKICAgICAgICB2W1RdICs9IGk7CiAgICB9CiAgICBjb3V0IDw8ICJUOiIgPDwgdltUXSA8PCAiICI7CiAgICB2W05dID0gKDIgKiB2W1RdKSAvICh2W0ZdICsgdltMXSk7CiAgICBjb3V0IDw8ICJOOiIgPDwgdltOXSA8PCBlbmRsOwp9CnZvaWQgZmlubHQodmVjdG9yPGRvdWJsZT4gJiB2KSB7CiAgICB2W0xdID0gdltGXTsKICAgIGZvciAoZG91YmxlIGkgPSAxOyBpIDwgdltOXTsgaSsrKSB7CiAgICAgICAgdltMXSArPSB2W0ldOwogICAgfQogICAgY291dCA8PCAiTDoiIDw8IHZbTF0gPDwgIiAiOwoKICAgIHZbVF0gPSB2W0ZdOwogICAgZm9yIChkb3VibGUgaSA9ICh2W0ZdICsgdltJXSk7IGkgPD0gKHZbTF0pOyBpICs9IHZbSV0pIHsKICAgICAgICB2W1RdICs9IGk7CiAgICB9CiAgICBjb3V0IDw8ICJUOiIgPDwgdltUXSA8PCBlbmRsOwp9Cgp2b2lkIGZpdGxuKHZlY3Rvcjxkb3VibGU+ICYpIHsKICAgIGRpZSgibm90IGNoZWNraW5nIHRoaXMgY29uZGl0aW9uIik7Cn0KCnZvaWQgZmxuaXQodmVjdG9yPGRvdWJsZT4gJiB2KSB7CiAgICB2W0ldID0gKHZbTF0gLSB2W0ZdKSAvICh2W05dIC0gMSk7CiAgICBjb3V0IDw8ICJJOiIgPDwgdltJXSA8PCAiICI7CiAgICB2W1RdID0gdltGXTsKICAgIGZvciAoZG91YmxlIGkgPSAodltGXSArIHZbSV0pOyBpIDw9ICh2W0xdICsgdltJXSk7IGkgKz0gdltJXSkgewogICAgICAgIHZbVF0gKz0gaTsKICAgIH0KICAgIGNvdXQgPDwgIlQ6IiA8PCB2W1RdIDw8IGVuZGw7Cn0KCnZvaWQgZmx0aW4odmVjdG9yPGRvdWJsZT4gJiB2KSB7CiAgICB2W05dID0gKDIgKiB2W1RdKSAvICh2W0ZdICsgdltMXSk7CiAgICBjb3V0IDw8ICJOOiIgPDwgdltOXSA8PCAiICI7CiAgICB2W0ldID0gKHZbTF0gLSB2W0ZdKSAvICh2W05dIC0gMSk7CiAgICBjb3V0IDw8ICJJOiIgPDwgdltJXSA8PCBlbmRsOwp9Cgp2b2lkIGZ0bmlsKHZlY3Rvcjxkb3VibGU+ICYgdikgewogICAgdltMXSA9ICgoMiAqIHZbVF0pIC8gdltOXSkgLSB2W0ZdOwogICAgY291dCA8PCAiTDoiIDw8IHZbTF0gPDwgIiAiOwogICAgdltJXSA9ICh2W0xdIC0gdltGXSkgLyAodltOXSAtIDEpOwogICAgY291dCA8PCAiSToiIDw8IHZbSV0gPDwgZW5kbDsKfQoKdm9pZCBpbHRmbih2ZWN0b3I8ZG91YmxlPiAmKSB7CiAgICBkaWUoIm5vdCBjaGVja2luZyB0aGlzIGNvbmRpdGlvbiIpOwp9CnZvaWQgaWxuZnQodmVjdG9yPGRvdWJsZT4gJiB2KSB7CiAgICB2W0ZdID0gdltMXTsKICAgIGZvciAoZG91YmxlIGkgPSAxOyBpIDwgdltOXTsgaSsrKSB7CiAgICAgICAgdltGXSAtPSB2W0ldOwogICAgfQogICAgY291dCA8PCAiRjoiIDw8IHZbRl0gPDwgIiAiOwogICAgdltUXSA9IHZbRl07CiAgICBmb3IgKGRvdWJsZSBpID0gKHZbRl0gKyB2W0ldKTsgaSA8PSAodltMXSk7IGkgKz0gdltJXSkgewogICAgICAgIHZbVF0gKz0gaTsKICAgIH0KICAgIGNvdXQgPDwgIlQ6IiA8PCB2W1RdIDw8IGVuZGw7Cn0KCnZvaWQgaXRuZmwodmVjdG9yPGRvdWJsZT4gJiB2KSB7CiAgICB2W0ZdID0gKCh2W1RdICogKDIgLyB2W05dKSkgLSAoKHZbTl0gLSAxKSp2W0ldKSkgLyAyOwogICAgY291dCA8PCAiRjoiIDw8IHZbRl0gPDwgIiAiOwogICAgdltMXSA9ICgoMiAqIHZbVF0pIC8gdltOXSkgLSB2W0ZdOwogICAgY291dCA8PCAiTDoiIDw8IHZbTF0gPDwgZW5kbDsKfQoKdm9pZCBsbnRmaSh2ZWN0b3I8ZG91YmxlPiAmIHYpIHsKICAgIHZbRl0gPSAoKDIgKiB2W1RdKSAvIHZbTl0pIC0gdltMXTsKICAgIGNvdXQgPDwgIkY6IiA8PCB2W0ZdIDw8ICIgIjsKICAgIHZbSV0gPSAodltMXSAtIHZbRl0pIC8gKHZbTl0gLSAxKTsKICAgIGNvdXQgPDwgIkk6IiA8PCB2W0ldIDw8IGVuZGw7Cn0KCnZvaWQgYXNzaWduKHN0ZDo6dmVjdG9yPGRvdWJsZT4mIHYsIHN0ZDo6dmVjdG9yPGJvb2w+JiBmbGFncywgY2hhciBjLCBkb3VibGUgdmFsdWUpCnsKICAgIHN3aXRjaCAoYykKICAgIHsKICAgICAgICBjYXNlICdGJzogY2FzZSAnZic6IHZbRl0gPSB2YWx1ZTsgZmxhZ3NbRl0gPSB0cnVlOyBicmVhazsKICAgICAgICBjYXNlICdJJzogY2FzZSAnaSc6IHZbSV0gPSB2YWx1ZTsgZmxhZ3NbSV0gPSB0cnVlOyBicmVhazsKICAgICAgICBjYXNlICdMJzogY2FzZSAnbCc6IHZbTF0gPSB2YWx1ZTsgZmxhZ3NbTF0gPSB0cnVlOyBicmVhazsKICAgICAgICBjYXNlICdOJzogY2FzZSAnbic6IHZbTl0gPSB2YWx1ZTsgZmxhZ3NbTl0gPSB0cnVlOyBicmVhazsKICAgICAgICBjYXNlICdUJzogY2FzZSAndCc6IHZbVF0gPSB2YWx1ZTsgZmxhZ3NbVF0gPSB0cnVlOyBicmVhazsKICAgIH0KfQoKaW50IG1haW4oKQp7CiAgICB2ZWN0b3I8ZG91YmxlPiB2KDUpOwogICAgdmVjdG9yPGJvb2w+IGZsYWdzID0geyBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UgfTsKICAgIGZvciAoaW50IGkgPSAwOyBpICE9IDM7ICsraSkgewogICAgICAgIGNoYXIgYzsKICAgICAgICBkb3VibGUgdmFsdWU7CiAgICAgICAgc3RkOjpjaW4gPj4gYyA+PiB2YWx1ZTsKICAgICAgICBhc3NpZ24odiwgZmxhZ3MsIGMsIHZhbHVlKTsKICAgIH0KICAgIGNvbnN0IHN0ZDo6bWFwPHN0ZDo6dmVjdG9yPGJvb2w+LCB2b2lkKCopKHN0ZDo6dmVjdG9yPGRvdWJsZT4gJik+IG0gPSB7CiAgICAgICAge3t0cnVlLCB0cnVlLCB0cnVlLCBmYWxzZSwgZmFsc2V9LCBmaWxudH0sCiAgICAgICAge3t0cnVlLCB0cnVlLCBmYWxzZSwgdHJ1ZSwgZmFsc2V9LCBmaW5sdH0sCiAgICAgICAge3t0cnVlLCBmYWxzZSwgdHJ1ZSwgdHJ1ZSwgZmFsc2V9LCBmbG5pdH0sCiAgICAgICAge3t0cnVlLCBmYWxzZSwgdHJ1ZSwgZmFsc2UsIHRydWV9LCBmbHRpbn0sCiAgICAgICAge3t0cnVlLCBmYWxzZSwgZmFsc2UsIHRydWUsIHRydWV9LCBmdG5pbH0sCiAgICAgICAge3tmYWxzZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgZmFsc2V9LCBpbG5mdH0sCiAgICAgICAge3tmYWxzZSwgdHJ1ZSwgZmFsc2UsIHRydWUsIHRydWV9LCBpdG5mbH0sCiAgICAgICAge3tmYWxzZSwgZmFsc2UsIHRydWUsIHRydWUsIHRydWV9LCBsbnRmaX0KICAgIH07CgogICAgYXV0byBpdCA9IG0uZmluZChmbGFncyk7CiAgICBpZiAoaXQgPT0gbS5lbmQoKSkgewogICAgICAgIHN0ZDo6Y291dCA8PCAiRmF0YWwgRXJyb3I6IG5vdCBjaGVja2luZyB0aGlzIGNvbmRpdGlvblxuIjsKICAgICAgICByZXR1cm4gRVhJVF9GQUlMVVJFOwogICAgfQogICAgaXQtPnNlY29uZCh2KTsKfQo=