#include <iostream>
#include <fstream>
#include <vector>
#include "math.h"
using namespace std;


class Automate;
class Etat;
class Transition;

class Etat_composite
{
    public:
        int numero;
        bool initial;
        bool final;
        vector <Etat> tab_etats_simples;
        vector <Transition> tab_transitions;
        vector <Etat_composite> tab_etats_composites_destination;
        Etat_composite(int);
        Etat_composite();
};

class Automate
{
    public :
        vector <Etat> tab_etats_basiques;
        char alphabet_max;
        int nb_etats;
        Automate();
        Automate(int);
        void determinisation(vector <Etat> tab_etats_basiques);
        void lire();
        vector <Etat_composite> tab_etats_composites;
};


class Etat
{
    public:
        int numero;
        bool initial;
        bool final;
        vector <Transition> tab_transitions;
        Etat(int);
        Etat();
};


class Ptr_etat
{
    public:
        Etat* ptr_sur_etat;
        Ptr_etat(Etat);
        Ptr_etat();
};


class Transition
{
    public:
        char lettre;
        vector <Ptr_etat> tabPointeur;
        Transition(char);
};
