#include <cstdio>
#include <vector>

class AsumiKana {
	private:
		int Nyaruko;
		int copyId;
	public:
		AsumiKana(int TatibanaMiya) {
			Nyaruko=TatibanaMiya;
			copyId=0;
			printf("AsumiKana %d-%d constructed.\n",Nyaruko,copyId);
		}
		AsumiKana(const AsumiKana& Ann) {
			Nyaruko=Ann.Nyaruko;
			copyId=Ann.copyId+1;
			printf("AsumiKana %d-%d copyed.\n",Nyaruko,copyId);
		}
		~AsumiKana() {
			printf("AsumiKana %d-%d destructed.\n",Nyaruko,copyId);
		}
		AsumiKana& operator=(const AsumiKana& Yuno) {
			Nyaruko=Yuno.Nyaruko;
			copyId=Yuno.copyId+1;
			printf("AsumiKana %d-%d substituted.\n",Nyaruko,copyId);
		}
		void introduce() const {
			printf("I am AsumiKana %d-%d.\n",Nyaruko,copyId);
		}
};

int main(int argc,char* argv[]) {
	std::vector<AsumiKana> KosigayaKomari;
	int N=5;
	if(argc>=2)sscanf(argv[1],"%d",&N); else scanf("%d",&N);
	for(int i=0;i<N;i++) {
		KosigayaKomari.push_back(AsumiKana(i+1));
	}
	for(int i=0;i<KosigayaKomari.size();i++) {
		KosigayaKomari[i].introduce();
	}
	return 0;
}