#include<string>
#include<iostream>
#include<fstream>
#include<vector>
#include<iomanip>
#include<sstream>
#include<cmath>
#include <memory>

using std::string;
using std::make_shared;

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

class Triangle : public Figure {
 private:
    int a, b, c;
 public:
    Triangle(const int& a, const int& b, const int& c) : Figure("TRIANGLE"),
    a(a), b(b), c(c) {}
    string Name() const {
        return t;
    }
    double Perimeter() const {
        return a + b + c;
    }
    double Area() const {
        double p = Perimeter() / 2;
        return sqrt(p * (p - a) * (p - b) * (p - c));
    }
};

class Rect : public Figure {
 private:
    int a, b;
 public:
    Rect(const int& a, const int& b) : Figure("RECT"), a(a), b(b) {}
    string Name() const {
        return t;
    }
    double Perimeter() const {
        return 2 * (a + b);
    }
    double Area() const {
        return a * b;
    }
};

class Circle : public Figure {
 private:
    int r;
 public:
    explicit Circle(const int& r) : Figure("CIRCLE"), r(r) {}
    string Name() const {
        return t;
    }
    double Perimeter() const {
        return r * 6.28;
    }
    double Area() const {
        return r * r * 3.14;
    }
};

std::shared_ptr<Figure> CreateFigure(std::istringstream stream) {
    string figure;
    stream >> figure;
    if (figure == "TRIANGLE") {
        int a, b, c;
        stream >> a >> b >> c;
        std::shared_ptr<Figure> res;
        res = make_shared<Triangle>(a, b, c);
        return res;
    } else if (figure == "RECT") {
        int a, b;
        stream >> a >> b;
        std::shared_ptr<Figure> res;
        res = make_shared<Rect>(a, b);
        return res;
    } else if (figure == "CIRCLE") {
        int r;
        stream >> r;
        std::shared_ptr<Figure> res;
        res = make_shared<Circle>(r);
        return res;
    } else {
        std::shared_ptr<Figure> res;
        return res;
    }
}