

/**********************************************************************/
/*                                                                    */ 
/*                        TD 1, Exercice 6                            */
/*                                                                    */
/**********************************************************************/


import java.util.* ;


public class MsgQueue {
    Vector queue = new Vector() ;
    
    public synchronized void send(Object obj) {
        queue.addElement(obj);
    }
    
    public synchronized Object recv() {
        if (queue.size()==0) 
            return null;
        Object obj = queue.firstElement();
        queue.removeElementAt(0);
        return obj;
    }

    public synchronized int size() {
        return queue.size();
    }
    
}
    
public class Process {
    MsgQueue In;
    MsgQueue Out;
    
    public Process(MsgQueue i,MsgQueue o) {
        In=i;
        Out=o;
    }
    
    public void send(int x) {
        Out.send(new Integer(x));
    }
    
    public int recv() {
        Object x = In.recv();
        while (x==null)
	    x=In.recv();
        int res = ((Integer) x).intValue();
        return res;
    }
}

public class Filtre implements Runnable {
   
    Process p;
    int d,max ;
    
    Filtre(int n,int maxi,MsgQueue i,MsgQueue o) {
	p = new Process(i,o);
        d = n;
        max = maxi;
    };
    
    public void run() {
	int m=0;
        while (m<max) {
	    m = p.recv();
            if ((m%d)!=0) {
		p.send(m);
	    } else {
                if ((m==d)&&(m!=max)) System.out.print(" "+d);
	    };
            if (m==max) p.send(m) ;
                
	};
    }
}

public class Exo6 {

    static final int Max =50;

    static void main(String[] args) {
        MsgQueue l,r;

        l = new MsgQueue();    
        for (int i=2;i<Max+1;i++) {
	    l.send(new Integer(i));
	};
        for (int i=2;i<Max+1;i++) {
	    r = new MsgQueue();
            Runnable f = new Filtre(i,Max,l,r);
            new Thread(f).start();
            l=r;
	};
    }
}
