#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>

#define MAX_VERTEX 20
#define MAX_EDGE 20
int
main(int argc, char*argv[])
{
	FILE *fp;
	int i,j;

	int n_vertex, n_edge, direct;
	int start_vertex, end_vertex;
	int **matrix;

	// Program initialize
    	srand(time(0));
	fp = fopen ("input.txt","wt");
	if (fp==NULL) {
		fprintf(stderr,"ERROR : Can't opne input.txt.\n");
		exit(1);
	}

	// Variable initialize
	printf("input vertex (0: random) :");
	scanf("%d",&n_vertex);
	if (n_vertex==0) {
		n_vertex = rand() % MAX_VERTEX + 1;		
		printf("vertex number: %d.\n",n_vertex);
	}
	printf("input edge (0:random) :");
	scanf("%d",&n_edge);
	if (n_edge==0) {
		n_edge = rand() % MAX_EDGE + 1;		
		printf("edge number: %d.\n",n_edge);
	}
	printf("direct ?(0: no, 1: yes) :");
	scanf("%d",&direct);

	matrix = (int**) calloc(n_vertex,sizeof(int*));
	if (matrix==NULL) {
		fprintf(stderr,"ERROR : can't alloc matrix.\n");
		exit(1);
	}
	for (i=0 ; i < n_vertex ; i++){
		matrix[i] = (int*) calloc(sizeof(int),n_edge);
		if (matrix[i]==NULL) {
			fprintf(stderr,"ERROR : Can't memory allocation of matrix[%d].\n",i);
			exit(1);
		}
	}

	// Make graph
	for (i=0 ; i < n_edge ; i++){
		start_vertex = rand() % n_vertex;
		while(1){
			end_vertex = rand() % n_vertex;
			if (end_vertex != start_vertex) break;
		}
		for (j=0; j < i ; j++){
			if (matrix[start_vertex][j]==1 && (matrix[end_vertex][j]==1 || matrix[end_vertex][j]==-1) ) break;
		}
		if (j < i) {
			i--;
			continue;
		}
		matrix[start_vertex][i] = 1;
		if (direct==1)
			matrix[end_vertex][i] = -1;
		else
			matrix[end_vertex][i] = 1;
	}

	// Generate matrix file
	fprintf(fp,"(%d %d)\n",n_vertex, n_edge);
	for (i=0 ; i < n_vertex ; i++){
		for (j=0 ; j < n_edge ; j++){
			fprintf(fp,"%d\t",matrix[i][j]);
		}
		fprintf(fp,"\n");
	}
		
	fclose(fp);
	return 0;
}
