/*                  CAV.CPP - by Zeljko Svedic (59 lines)                  */

#include <stdio.h>

struct { int ne[3],fl[3],brne,brv; }c[1001];
int n,k,fl[1001]={0},rje[1001]={0},brfl=0,minte=9999;

int visit(int sto, int od, int tez, int last)
{
	int i,tm,flag=0,go=1;

	if(fl[sto])
		if(sto==1&&brfl==n&&tez<minte) { minte=tez; return 1; } else return 0;

	if(sto<=k) {
		for(i=0;i<3;i++) if(c[sto].ne[i]==last) { flag=1; break; }
		if(flag) last=sto; else return 0;
	}

	for(fl[sto]=1,brfl++,flag=i=0;i<3;i++)
		if(!fl[ (tm=c[od].ne[i]) ] && tm>k) {
			if(c[tm].brv>1) c[tm].brv--; else go=0;
			break;
		}

	if(go) {
		for(i=0;i<3;i++) flag+=visit(c[sto].ne[i],sto,tez+c[sto].fl[i],last);
		for(i=0;i<3;i++) if(!fl[(tm=c[od].ne[i])]&&tm>k) { c[tm].brv++; break; }
	}

	fl[sto]=0; brfl--;

	if(flag) { rje[brfl]=sto; return 1; } else return 0;
}

void main(void)
{
	FILE *fp=fopen("cav.in","rt");

	fscanf(fp,"%i%i",&n,&k);
	for(int i=0,tm1,tm2,tm3;i<(n*3)/2;i++)
	{
		fscanf(fp,"%i%i%i",&tm1,&tm2,&tm3);
		c[ (c[tm1].ne[ c[tm1].brne ]=tm2) ].ne[ c[tm2].brne ]=tm1;
		c[tm1].fl[ c[tm1].brne++ ]=c[tm2].fl[ c[tm2].brne++ ]=tm3;
	}
	fclose(fp);

	c[0].ne[0]=c[0].ne[1]=c[0].ne[2]=1; fl[0]=1;

	for(i=0;i<=n;i++) c[i].brv=2;
	for(i=0;i<3;i++) if(c[1].ne[i]>k) { c[ c[1].ne[i] ].brv=3; break; }

	visit(1,0,0,c[1].ne[0]);

	fp=fopen("cav.out","wt");
	for(i=0;i<n;i++) fprintf(fp,"%i ",rje[i]);
	fclose(fp);
}