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

const float PI = 3.14;

class Figure {
 public:
    explicit Figure(const std::string &name) : name_(name) {}

    virtual std::string Name() = 0;

    virtual double Perimeter() = 0;

    virtual double Area() = 0;

    const std::string name_;
};

class Rect : public Figure {
 public:
    Rect(const std::string &name, const double &width, const double &height)
    : Figure(name)
    , width_(width)
    , height_(height)
    {}

    std::string Name() override {
        return name_;
    }

    double Perimeter() override {
        return (width_ + height_) * 2;
    }

    double Area() override {
        return width_ * height_;
    }

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

class Triangle : public Figure {
 public:
    Triangle(const std::string &name, double a, double b, double c)
    : Figure(name)
    , a(a)
    , b(b)
    , c(c)
    {}

    std::string Name() override {
        return name_;
    }

    double Perimeter() override {
        return a + b + c;
    }

    double Area() override {
        double p = this->Perimeter() / 2;
        return sqrt(p * (p - a) * (p - b) * (p - c));
    }

 private:
    double a, b, c;
};

class Circle : public Figure {
 public:
    Circle(const std::string &name, double r) : Figure(name), radius(r) {}

    std::string Name() override {
        return name_;
    }

    double Perimeter() override {
        return 2 * radius * PI;
    }

    double Area() override {
        return PI * radius * radius;
    }

 private:
    double radius;
};

std::shared_ptr<Figure> CreateFigure(std::istringstream &is) {
    std::string figure_name;
    is >> figure_name;
    if (figure_name == "RECT") {
        double w, h;
        is >> w >> h;
        return make_shared<Rect>(figure_name, w, h);
    } else if (figure_name == "TRIANGLE") {
        double a, b, c;
        is >> a >> b >> c;
        return make_shared<Triangle>(figure_name, a, b, c);
    } else if (figure_name == "CIRCLE") {
        double r;
        is >> r;
        return make_shared<Circle>(figure_name, r);
    }
}

int main() {
    std::vector<std::shared_ptr<Figure>> figures;
    for (std::string line; getline(std::cin, line);) {
        std::istringstream is(line);

        std::string command;
        is >> command;
        if (command == "ADD") {
            is >> std::ws;
            figures.push_back(CreateFigure(is));
        } else if (command == "PRINT") {
            for (const auto &current_figure : figures) {
                std::cout << std::fixed << std::setprecision(3)
                     << current_figure->Name() << " "
                     << current_figure->Perimeter() << " "
                     << current_figure->Area() << '\n';
            }
        }
    }
    return 0;
}