#include <cstdio>
#include <cfloat>
#include <stack>
#include <cstdlib>
using namespace std;

#define MAX_N 15

int n;
int idx[MAX_N], dst[MAX_N], num[MAX_N];
double dp[MAX_N][1 << MAX_N];
int prv[MAX_N][1 << MAX_N];
double spd[1 << MAX_N];


int main(){
	scanf("%d", &n);
	for(int i = 0; i < n; ++i){
		scanf("%d%d%d", &idx[i], &dst[i], &num[i]);
	}

	int M = 1 << n;
	for(int S = 0; S < M; ++S){
		int c = 0;
		for(int i = 0; i < n; ++i){
			prv[i][S] = -1;
			dp[i][S] = DBL_MAX;

			if(S >> i & 1){
				c += num[i];
			}
		}
		spd[S] = (7 + 2 * c) / 200.0;
	}

	for(int i = 0; i < n; ++i){
		dp[i][1 << i] = 0.0;
	}

	for(int S = 1; S < M; ++S){
		for(int i = 0; i < n; ++i){
			if(!(S >> i & 1)){ continue; }
			for(int j = 0; j < n; ++j){
				if(S >> j & 1){ continue; }

				double tm = dp[i][S] + abs(dst[i] - dst[j]) * spd[S];
				int T = S | 1 << j;
				if(dp[j][T] > tm){
					dp[j][T] = tm;
					prv[j][T] = i;
				}
			}
		}
	}

	int x = 0;
	for(int i = 1; i < n; ++i){
		if(dp[x][M - 1] > dp[i][M - 1]){
			x = i;
		}
	}

	stack<int> st;
	int U = M - 1;
	while(x != -1){
		st.push(idx[x]);
		int y = prv[x][U];
		U ^= 1 << x;
		x = y;
	}

	printf("%d", st.top());
	st.pop();
	while(!st.empty()){
		printf(" %d", st.top());
		st.pop();
	}
	puts("");
}