#include <stdio.h>
#include <string.h>
#include "mpi.h"
main(int argc, char *argv[])
{
	int my_rank,flag;
	int p;
	int source;
	int dest;
	char message[1000];
	int tag = 0;
	MPI_Status status;
	MPI_Request req;

	MPI_Init(&argc,&argv);

	MPI_Comm_rank(MPI_COMM_WORLD, &my_rank);
	MPI_Comm_size(MPI_COMM_WORLD, &p);
	if (my_rank!=0)
	{
		sprintf(message,"Hello", my_rank,p);
		dest = 0;
		MPI_Isend(message, strlen(message)+1, MPI_CHAR,dest,tag,MPI_COMM_WORLD,&req);
		//MPI_Wait(&req,&status);
	}
        else
        {
        	for (source=1;source<p;source++)
        	{
        		MPI_Irecv(message, 100, MPI_CHAR,source,tag,MPI_COMM_WORLD,&req);
        		MPI_Test(&req,&flag,&status);
        		if (flag == 1)
        				printf("Rank %d says %s\n",status.MPI_SOURCE,message);
        		else
        		      printf("No Message is received from rank %d\n", source);
        	}


        }
        MPI_Finalize();
}

