#include <iostream>
#include <iomanip>
#include <sstream>
#include <cmath>
#include <string>
#include <vector>
#include <memory>

#define PI 3.14

using namespace std;

class Figure {
public:
    Figure(const string& type) : type_(type) {}
    virtual string Name() = 0;
    virtual double Perimeter() = 0;
    virtual double Area() = 0;
private:
    const string& type_;
};

class Triangle : public Figure {
public:
    Triangle(int a, int b, int c) : Figure("TRIANGLE"), a_(a), b_(b), c_(c) {}
    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:
    const int a_, b_, c_;
};

class Rect : public Figure {
public:
    Rect(int w, int h) : Figure("RECT"), w_(w), h_(h) {}
    string Name() {
        return "RECT";
    }
    double Perimeter() {
        return 2 * (w_ + h_);
    }
    double Area() {
        return w_ * h_;
    }
private:
    int w_, h_;
};

class Circle : public Figure {
public:
    Circle(int r) : Figure("CIRCLE"), r_(r) {}
    string Name() {
        return "CIRCLE";
    }
    double Perimeter() {
        return 2 * PI * r_;
    }
    double Area() {
        return PI * r_ * r_;
    }
private:
    int r_;
};

shared_ptr<Figure> CreateFigure(istringstream& is) {
    string figure_type;
    is >> figure_type;
    if (figure_type == "TRIANGLE") {
        int a, b, c;
        is >> a >> b >> c;
        return make_shared<Triangle>(a, b, c);
    } else if (figure_type == "RECT") {
        int w, h;
        is >> w >> h;
        return make_shared<Rect>(w, h);
    } else {
        int r;
        is >> r;
        return make_shared<Circle>(r);
    }
}

int main() {
  vector<shared_ptr<Figure>> figures;
  for (string line; getline(cin, line); ) {
    istringstream is(line);

    string command;
    is >> command;
    if (command == "ADD") {
      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;
}
