#include <string>
#include <cmath>
#include <memory>

using std::string;
using std::cout;
using std::vector;
using std::cin;
using std::endl;
using std::fixed;

class Figure {
 public:
  virtual string Name() const = 0;
  virtual double Perimeter() const = 0;
  virtual double Area() const = 0;
};

class Triangle : public Figure {
 public:
  Triangle(double a, double b, double c): a_(a), b_(b), c_(c) {}
    string Name() override {
      return "TRIANGLE";
    }
    double Perimeter() override {
      return a_ + b_ + c_;
    }
    double Area() override {
      return sqrt(Perimeter()/2 * (Perimeter()/2 - a_)
      * (Perimeter()/2 - b_) * (Perimeter()/2 - c_));
    }
 private:
  const double a_;
  const double b_;
  const double c_;
};

class Rect : public Figure {
 public:
  Rect(double width, double height) :
  width_(width), height_(height) {}
    string Name() override {
      return  "RECT";
    }
    double Perimeter() override {
      return (width_ + height_) * 2;
    }
    double Area() override {
      return width_ * height_;
    }

 private:
  const double width_;
  const double height_;
};

class Circle : public Figure {
 public:
  Circle(double r) : r_(r) {}
    string Name() override {
      return "CIRCLE";
    }
    double Perimeter() override {
      return 2 * 3.14 * r_;
    }
    double Area() override {
      return 3.14 * r_ * r_;
    }

 private:
  const double r_;
};

std::shared_ptr<Figure> CreateFigure(std::istream& input) {
  string name;
  input >> name;
  if (name == "RECT") {
    double width, height;
    input >> width >> height;
    return std::make_shared<Rect>(width, height);
  } else if (name == "TRIANGLE") {
    double a, b, c;
    input >> a >> b >> c;
    return std::make_shared<Triangle>(a, b, c);
  } else if (name == "CIRCLE") {
    double r;
    input >> r;
    return std::make_shared<Circle>(r);
  }
    return 0;
}