/* package codechef; // don't place package name! */

import java.util.*;
import java.lang.*;
import java.io.*;

/* Name of the class has to be "Main" only if the class is public.*/
//public class 
class FastReader
{
    BufferedReader br;
    StringTokenizer st;
 
    public FastReader()
    {
        br = new BufferedReader(new
                 InputStreamReader(System.in));
    }
 
    String next()
    {
        while (st == null || !st.hasMoreElements())
        {
            try
            {
                st = new StringTokenizer(br.readLine());
            }
            catch (IOException  e)
            {
                e.printStackTrace();
            }
        }
        return st.nextToken();
    }
 
    int nextInt()
    {
        return Integer.parseInt(next());
    }
 
    long nextLong()
    {
        return Long.parseLong(next());
    }
 
    double nextDouble()
    {
        return Double.parseDouble(next());
    }
 
    String nextLine()
    {
        String str = "";
        try
        {
            str = br.readLine();
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
        return str;
    }
}


public class Codechef
{
	public static void main (String[] args) throws java.lang.Exception
	{
		// your code goes here
		FastReader sc = new FastReader();
		int n = sc.nextInt();
		Pair p[] = new Pair[n-1];
		Graph g = new Graph(n);
		for(int i=0;i<n-1;i++)
		{
		    int v1 = sc.nextInt()-1;
		    int v2 = sc.nextInt()-1;
		    p[i]=new Pair(v1,v2);
		    g.addEdge(v1,v2);
		}
		g.dfs(0);
		HashMap<Pair,Integer> map = g.problemC();
		/*for(Map.Entry<Pair,Integer>entry:map.entrySet())
		{
		    Pair p1 = entry.getKey();
		    System.out.println((p1.x+1)+" "+(p1.y+1)+" "+entry.getValue());
		}*/
		//System.out.println(map);
		for(int i=0;i<n-1;i++)
		{
		    //System.out.println(map.containsKey(new Pair(p[i].y,p[i].x)));
		    System.out.println(map.get(new Pair(p[i].y,p[i].x)));
		}
	}
}

class Graph
{
    int n;
    List<List<Integer>> adjList;
    boolean visited[];
    int countNeighbours[];
    int itr[];
    int parent[];
    HashSet<Integer> set[];
    Graph(int nodes)
    {
        n=nodes;
        visited = new boolean[n];
        adjList = new ArrayList<>(n);
        countNeighbours = new int[n];
        itr = new int[n];
        parent = new int[n];
        set=new HashSet[n];
        for(int i=0;i<n;i++)
        {
            adjList.add(new ArrayList<>());
        }
    }
    void printList()
    {
        for(int i=0;i<n;i++)
        {
            System.out.print(i);
            List<Integer> list = adjList.get(i);
            for(int node:list)
            {
                
                System.out.print("->"+node);
            }
            System.out.println();
        }
    }
    int[] getNeighbours()
    {
        return countNeighbours;
    }
    void addEdge(int m,int n)
    {
        adjList.get(m).add(n);
        adjList.get(n).add(m);
        countNeighbours[m]++;
        countNeighbours[n]++;
    }
    int dfs(int start)
    {
        visited[start]=true;
        //System.out.println(start+" ");
        List<Integer> adjNodes=adjList.get(start);
        int max=0;
        for(int neighbour:adjNodes)
        {
            if(!visited[neighbour])
            {
                parent[neighbour]=start;
                max=Math.max(max,dfs(neighbour));
                
            }
        }
        itr[start]=max+1;
        if(set[max+1]==null){set[max+1]=new HashSet<>();}
        set[max+1].add(start);
        return itr[start];
        //return;
    }
    HashMap<Pair,Integer> problemC()
    {
        int min=0;
        HashMap<Pair,Integer>map = new HashMap<>();
        for(int i=0;i<n;i++)
        {
            if(set[i]!=null)
            {
                for(int node:set[i])
                {
                    map.put(new Pair(node,parent[node]),min);
                    min++;
                }
            }
        }
        return map;
    }
}

class Pair{
    int x;
    int y;
    Pair(int i,int j){
        x=i;
        y=j;
    }
    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (!(o instanceof Pair)) return false;
        Pair key = (Pair) o;
        return x == key.x && y == key.y;
    }
    @Override
    public int hashCode() {
        int result = x;
        result = 31*result + y;
        return result;
    }
}