import java.io.IOException;
import java.io.InputStream;
import java.util.*;
public class Solution {
    /*static ArrayList<Integer> ar[];
    static boolean vis[];
    static void dfs(int s) {
        vis[s]=true;
        c++;
        for(int j=0;j<ar[s].size();j++) {
            if(vis[ar[s].get(j)]==false)
                dfs(ar[s].get(j));
        }
    }*/
    /*static void merge(int arr[], int l, int m, int r) {
        int n1 = m - l + 1; 
        int n2 = r - m; 
        int L[] = new int [n1]; 
        int R[] = new int [n2]; 
        for (int i=0; i<n1; ++i) 
            L[i] = arr[l + i]; 
        for (int j=0; j<n2; ++j) 
            R[j] = arr[m + 1+ j]; 
        int i = 0, j = 0, k=1;  
        while (i < n1 && j < n2) { 
            if (L[i] <= R[j]) { 
                arr[k] = L[i]; 
                i++; 
            } 
            else { 
                arr[k] = R[j]; 
                j++; 
            } 
            k++; 
        } 
        while (i < n1) { 
            arr[k] = L[i]; 
            i++; 
            k++; 
        } 
        while (j < n2) { 
            arr[k] = R[j]; 
            j++; 
            k++; 
        } 
    } 
    static void sort(int arr[], int l, int r) { 
        if (l < r) {  
            int m = (l+r)/2;  
            sort(arr, l, m); 
            sort(arr , m+1, r); 
            merge(arr, l, m, r); 
        } 
    }*/
    public static void main(String args[])throws Exception {
        FastReader in = new FastReader(System.in);    
        int q = 1,i,j;
        StringBuilder sb = new StringBuilder();
            int n=in.nextInt(),res=0;
            ArrayList<Integer> tree[]=new ArrayList[n+1];
            for(i=0;i<=n;i++)
                tree[i]=new ArrayList<Integer>();
            ArrayList<Integer> ar[]=new ArrayList[n+1];
            for(i=0;i<=n;i++)
                ar[i]=new ArrayList<Integer>(); 
            int ans[]=new int[n];
            for(i=1;i<n;i++) {
                int x=in.nextInt();
                int y=in.nextInt();
                tree[x].add(y);
                tree[y].add(x);
                ar[x].add(i);
                ar[y].add(i);
            }
            HashSet<Integer> s=new HashSet<>();
            for(i=1;i<=n;i++) {
                if(tree[i].size()>2) {
                    res=1;
                    s.add(ar[i].get(0));
                    s.add(ar[i].get(1));
                    s.add(ar[i].get(2));
                    ans[ar[i].get(0)]=0;
                    ans[ar[i].get(1)]=1;
                    ans[ar[i].get(2)]=2;
                    break;
                }
            }
            if(res==0) {
                for(i=0;i<n-1;i++)
                    sb.append(i+"\n");
            }
            else {
                int k=3;
                for(i=1;i<n;i++) {
                    if(!s.contains(i))
                        ans[i]=k++;
                    sb.append(ans[i]+"\n");
                }
            }
            //sb.append(res+"\n");
            //System.out.println(res);
        
        System.out.println(sb);
    }
}
class FastReader {
    byte[] buf = new byte[2048];
    int index, total;
    InputStream in;
    FastReader(InputStream is) {
        in = is;
    }
    int scan() throws IOException {
        if (index >= total) {
            index = 0;
            total = in.read(buf);
            if (total <= 0) {
                return -1;
            }
        }
        return buf[index++];
    }
    String next() throws IOException {
        int c;
        for (c = scan(); c <= 32; c = scan()) ;
        StringBuilder sb = new StringBuilder();
        for (; c > 32; c = scan()) {
            sb.append((char) c);
        }
        return sb.toString();
    }
    String nextLine() throws IOException {
        int c;
        for (c = scan(); c <= 32; c = scan()) ;
        StringBuilder sb = new StringBuilder();
        for (; c != 10 && c != 13; c = scan()) {
            sb.append((char) c);
        }
        return sb.toString();
    }
    char nextChar() throws IOException {
        int c;
        for (c = scan(); c <= 32; c = scan()) ;
        return (char) c;
    }
    int nextInt() throws IOException {
        int c, val = 0;
        for (c = scan(); c <= 32; c = scan()) ;
        boolean neg = c == '-';
        if (c == '-' || c == '+') {
            c = scan();
        }
        for (; c >= '0' && c <= '9'; c = scan()) {
            val = (val << 3) + (val << 1) + (c & 15);
        }
        return neg ? -val : val;
    }
    long nextLong() throws IOException {
        int c;
        long val = 0;
        for (c = scan(); c <= 32; c = scan()) ;
        boolean neg = c == '-';
        if (c == '-' || c == '+') {
            c = scan();
        }
        for (; c >= '0' && c <= '9'; c = scan()) {
            val = (val << 3) + (val << 1) + (c & 15);
        }
        return neg ? -val : val;
    }
}