#include <iostream>
#include <vector>
using namespace std;

struct WrongType : public std::runtime_error {
	WrongType(const char* msg) :runtime_error{msg} {}
};

class Value {
public:
	enum class Type {
		NUMBER, STRING, ARRAY, OBJECT
	};

	virtual Type type() const =0;
	double& number() { throw WrongType {"Not a number"}; } // fat
};

class NumberValue : public Value {
	double n;
public:
	NumberValue(double x) :n{x} {}
	
	Type type() const override { return Value::Type::NUMBER; }
	double& number() { return n; }
};

int main() {
	return 0;
}