#include <memory>
#include <iostream>
#include <string>
#include <vector>
#include <sstream>
#include <iomanip>
#include <cmath>
using namespace std;
class Figure {
public:
virtual string Name() = 0;
virtual double Perimeter() = 0;
virtual double Area() = 0;
};
class Triangle : public Figure {
public:
Triangle(const int& one, const int& two, const int& three) {
a = one;
b = two;
c = three;
}
string Name() {
return "TRIANGLE";
}
double Perimeter() {
return a + b + c;
}
double Area() {
double p = (a + b + c) / 2.0;
return sqrt(p * (p - a) * (p - b) * (p - c));
}
private:
int a, b, c;
};
class Rect : public Figure {
public:
Rect(const int& one, const int& two) {
a = one;
b = two;
}
string Name() {
return "RECT";
}
double Perimeter() {
return 2.0 * (a + b);
}
double Area() {
return a * b;
}
private:
int a, b;
};
class Circle : public Figure {
public:
Circle(const int& one) {
a = one;
}
string Name() {
return "CIRCLE";
}
double Perimeter() {
return 2 * 3.14 * a;
}
double Area() {
return 3.14 * a * a;
}
private:
int a;
};
shared_ptr<Figure> CreateFigure(istringstream& is) {
string fig;
is >> fig;
if (fig == "RECT") {
int a, b;
is >> a >> ws >> b;
return make_shared<Rect>(a, b);
}
else if (fig == "TRIANGLE") {
int a, b, c;
is >> a >> ws >> b >> ws >> c;
return make_shared<Triangle>(a, b, c);
}
else if (fig == "CIRCLE") {
int a;
is >> a;
return make_shared<Circle>(a);
}
}
int main() {
vector<shared_ptr<Figure>> figures;
for (string line; getline(cin, line); ) {
istringstream is(line);
string command;
is >> command;
if (command == "ADD") {
is >> ws;
figures.push_back(CreateFigure(is));
} else if (command == "PRINT") {
for (const auto& current_figure : figures) {
cout << fixed << setprecision(3)
<< current_figure->Name() << " "
<< current_figure->Perimeter() << " "
<< current_figure->Area() << endl;
}
}
}
return 0;
}