private synchronized String handleRecv(){
	int n = getNo();
	HashMap<String,Integer> messages =  new HashMap<String,Integer>();
	ArrayList<Integer> nodes  = new ArrayList<Integer>(n);
	    A: for ( int i = 0 ; i < n-F -1; i++ ){
	    while( vals.peek()!= null &&  i < getNo()-F -1){
		try{
		    Utils.out(pid,"waiting");
		    wait();
		}catch  (InterruptedException e){
		    Utils.out(pid,"interrupted");
		}
		
		if( i >= n-F-1) {
		    Utils.out(pid,"breaking out");
		    break A;
		} // enough messages have been 
		//read or enough nodes have gone down
		
		
		Integer index = vals.poll();
		
		Utils.out(pid , "asjdklsajadlk " +index);
		
		nodes.add(index +1 );

		Utils.out( pid, "got a message from "+ index);

		/*
		  check if processes have become faulty
		 */



		String msg = buffer_x[index];
		
		Utils.out (pid,msg);
		if ( messages.containsKey(msg)){
		    messages.put(msg, messages.get(msg)+1); // increment message counter
		}else{
		    messages.put(msg,1); // increment message counter
		}
		
	    }
	}
	// have read all the values... take the majority
	
	String majority  = null;
	int max = 0;
	for ( String s : messages.keySet()){
	    int val = messages.get(s);
	    if ( val > max){
		max = val;
		majority = s;
	    }
	}

	Utils.out(pid, "majority " +majority);

	boolean d  =  messages.size() ==1 ;
	//only one value of x yaay
	for ( int id : nodes){
	    unicast(new Message(pid,id,OUTCOME,""+ d + SEP +majority));
	}
	
	return majority;
    }