import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.*;

public class Problem628C {
	public static void main(String[] args) throws Exception {
		BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));

		int n = Integer.parseInt(reader.readLine());
		int[] u = new int[n - 1];
		int[] v = new int[n - 1];
		int[] degreeCount = new int[n];
		for (int i = 0; i < n - 1; i++) {
			StringTokenizer aT = new StringTokenizer(reader.readLine());
			u[i] = Integer.parseInt(aT.nextToken()) - 1;
			v[i] = Integer.parseInt(aT.nextToken()) - 1;
			degreeCount[u[i]]++;
			degreeCount[v[i]]++;
		}
		int maxNode = 0;
		int maxDegree = Integer.MIN_VALUE;
		for (int i = 0; i < n; i++) {
			if (degreeCount[i] > maxDegree) {
				maxDegree = degreeCount[i];
				maxNode = i;
			}
		}
		Set<Integer> maxEdges = new TreeSet<Integer>();
		for (int i = 0; i < u.length; i++) {
			if (u[i] == maxNode || v[i] == maxNode) {
				maxEdges.add(i);
			}
		}
		//System.out.println(maxNode + " " + maxDegree + " " + maxEdges);

		// 0 through maxDegree are reserved
		int a = 0;
		int current = maxDegree;
		for (int i = 0; i < n - 1; i++) {
			if (maxEdges.contains(i)) {
				System.out.println(a++);
			} else {
				System.out.println(current++);
			}
		}

		reader.close();
	}
}
