/* 4. 다음 프로그램의 출력을 써라. */

#include <stdio.h>
class Singer {
public:
	virtual void sing(Singer *p) {
		printf("니");
		if (p) p->sing();
	}
	void sing() { printf("나"); }
	static void sing(Singer *p,Singer *q,Singer *r,Singer *s) {
		p->sing(q);
		q->sing(r);
		r->sing(s);
		s->sing(p);
	}
};
class NaHuNa : public Singer {
public:
	virtual void sing(Singer *p) {
		printf("노");
		if (p) p->sing();
	}
	void sing() { printf("닐"); }
};
class NamJin : public Singer {
public:
	virtual void sing(Singer *p) {
		printf("니");
		if (p) p->sing();
	}
	void sing() { printf("리"); }
};
class Taegyun : public Singer {
public:
	virtual void sing(Singer *p) {
		printf("야");
		if (p) p->sing();
	}
	void sing() { printf("앙"); }
};

void main()
{
	Singer::sing(new Singer(),new NaHuNa(),new NamJin(),new Taegyun());
	printf("\n");
}