#include <iostream>
using namespace std;

class persona
{
	protected:
		virtual string quien_soy(string x=""s) {
			const auto s="Soy una persona.\n"s; 
			auto p=x.find(s);
    		if (p==string::npos)
    			x += s;
    		else {
    			x = x.substr(0,p)+ x.substr(p+s.size()) +s;
    		}
    		return x;
		}
    public:
    void que_eres() { cout<<quien_soy() <<endl; }
    virtual ~persona() {}
};

class estudiante: public virtual persona
{
    protected:
    string quien_soy(string x=""s) override
    {
        return persona::quien_soy(x+"Soy un estudiante.\n");
    }
};

class empleado: public virtual persona
{
	protected:
    string quien_soy(string x=""s) override
    {
        return persona::quien_soy(x+"Soy un empleado.\n");
    }
};

class practicante: public estudiante, public empleado
{
	protected:
    string quien_soy(string x=""s) override
    {
        return empleado::quien_soy(estudiante::quien_soy(x+"Soy un praticante, por consiguiente:\n"));
    }
};

int main()
{
    practicante jose;
    jose.que_eres();
}