// This program writes the output to the file "output2"
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <fstream.h>
#include <math.h>
#include "String.h"
#include "pph.h"

int Divide[MAXSIZE];

int Compare (const void * a, const void * b)
{
  return ( *(int*)a - *(int*)b );
}

void write_index(int column,int num) {
	FILE *ff,*fp;
	int i,j,k,gap,digit;
	int sort[MAXSIZE];
	
	fp = fopen("tempout","a");
	ff = fopen("divide","r");
	
	if(num==2)
	fprintf(fp,"The index: (columns are grouped by the same connected components and different groups are seperated by '|')\n");
	
	i = 0;	
	while(fscanf(ff,"%d",&digit)!=EOF) {
		Divide[i] = digit;
		i++;
	}
	Divide[i] = -2;
	
	i = j = gap = 0;
	while(Divide[i]!=-2) {
		if(Divide[i]!=-1)
			sort[j++] = Divide[i]+2000*gap;
		else
			gap++;
		i++;
	}
	
	qsort(sort,column,sizeof(int),Compare);
	
	i = j = k = gap = 0;
	
	while(Divide[i]!=-2) {			// print out the index
		if(Divide[i]!=-1) {
			digit = sort[j]-2000*gap+1;
			if(num==2)
				fprintf(fp,"%d ",sort[j]-2000*gap+1);
			Divide[i] = sort[j]-2000*gap;
			j++;
		} else {
			digit = 0;
			if(num==2)
				fprintf(fp,"| ");
			gap++;
		}
		if(num==2 && k>70) {
			fprintf(fp,"\n");
			k = 0;
		}
		i++;
		
		if(digit<10)
			k++;
		else if(digit>=10 && digit<100)
			k = k+2;
		else if(digit>=100 && digit<1000)
			k = k+3;
		else if(digit>=1000 && digit<10000)
			k = k+4;
		else
			k = k+5;
		k++;
	}
	if(num==2)
		fprintf(fp,"\n");
	
	if(num==2) {
		for(j=0;j<NEWLINE;j++) 
			fprintf(fp,"-");
		fprintf(fp,"\n\n");	
	}
	
	fclose(ff);
	fclose(fp);
}

void write_format21(char *prefix, char *filename) {
	char inname[100];
	char *hname = "foroutput";
	char string1[MAXSIZE];
	char string2[MAXSIZE];
	
	int i,j,no,row,column;
	
	FILE *fp,*fp1,*fp2,*fp3,*fp4;
	
	char *outname = "output2";
	strcpy(inname,prefix);
	strncat(inname,".1",2);
	
	fp = fopen(outname,"w");
	fp1 = fopen(filename,"r");
	fp2 = fopen(inname,"r");
	fp3 = fopen("title","r");
	fp4 = fopen(hname,"r");
	
	fscanf(fp2,"%d%d",&row,&column);
	fscanf(fp4,"%d%d",&row,&column);
	
	fprintf(fp,"Output format:\ninput haplotype\ninput haplotype\n\ngenotype\n\noutput haplotype\noutput haplotype\n");
	for(j=0;j<16;j++) 
		fprintf(fp,"-");	
	fprintf(fp,"\n");
	fclose(fp);
	
	write_index(column,1);
	
	fp = fopen("output2","a");
	while(fscanf(fp1,"%s",string1)!=EOF) {
		fscanf(fp3,"%d",&no);
		fscanf(fp1,"%s",string2);
		
		for(i=0;i<no;i++) {
			j = 0;
			while(Divide[j]!=-2) {
				if(Divide[j]!=-1)
					fprintf(fp,"%c",string1[Divide[j]]);
				else
					fprintf(fp,"|");
				j++;
			}
			fprintf(fp,"\n");
		
			j = 0;
			while(Divide[j]!=-2) {
				if(Divide[j]!=-1)
					fprintf(fp,"%c",string2[Divide[j]]);
				else
					fprintf(fp,"|");
				j++;
			}
			fprintf(fp,"\n\n");
			
			j = 0;
			while(Divide[j]!=-2) {
				if(Divide[j]==-1) {
					fprintf(fp,"|");
					j++;
					continue;
				}
				if(string1[Divide[j]]==string2[Divide[j]])
					fprintf(fp,"%c",string1[Divide[j]]);
				else
					fprintf(fp,"2");
				j++;
			}
			fprintf(fp,"\n\n");
			
			fscanf(fp4,"%s",string1);	
			j = 0;
			while(Divide[j]!=-2) {
				if(Divide[j]!=-1)
					fprintf(fp,"%c",string1[Divide[j]]);
				else
					fprintf(fp,"|");
				j++;
			}
			fprintf(fp,"\n");
			
			fscanf(fp4,"%s",string1);
			j = 0;
			while(Divide[j]!=-2) {
				if(Divide[j]!=-1)
					fprintf(fp,"%c",string1[Divide[j]]);
				else
					fprintf(fp,"|");
				j++;
			}
			fprintf(fp,"\n");
			
			for(j=0;j<NEWLINE;j++) 
				fprintf(fp,"-");
				
			fprintf(fp,"\n");
		}
	}
	
	fclose(fp);
	fclose(fp1);
	fclose(fp2);
	fclose(fp3);
	fclose(fp4);
}

bool check_line(char *line) {
	int len = strlen(line);
	int i;
	for(i=0;i<len;i++) {
		if(line[i]!=' ' || line[i]!='\n')
			return true;
	}
	return false;
}

void write_format22(char *prefix, char *filename) {
	char inname[100];
	char *hname = "foroutput";
	char string1[MAXSIZE];
	char string2[MAXSIZE];
	char title[100];
	int i,j,no,row,column;
	int which = 0;
	FILE *fp,*fp2,*fp3,*fp4;
	
	char *outname = "output2";
	
	strcpy(inname,prefix);
	strncat(inname,".1",2);
	
	fp = fopen(outname,"w");
	fp2 = fopen(inname,"r");
	fp3 = fopen("title","r");
	fp4 = fopen(hname,"r");
	
	ifstream infile(filename);
	fscanf(fp2,"%d%d",&row,&column);
	fscanf(fp4,"%d%d",&row,&column);
	
	fprintf(fp,"Output format:\nlabel\ninput haplotype\ninput haplotype\n\ngenotype\n\noutput haplotype\noutput haplotype\n");
	for(j=0;j<16;j++) 
		fprintf(fp,"-");	
	fprintf(fp,"\n");
	fclose(fp);

	write_index(column,1);
	
	fp = fopen("output2","a");
	while(infile) {
		
		if(which==0) {
			infile.getline(title,MAXSIZE);
			if(!check_line(title)) {
				which = 0;
				continue;
			}
			which = 1;
		}
		
		if(which==1) {	
			infile.getline(string1,MAXSIZE);
			if(!check_line(string1)) {
				which = 1;
				continue;
			}
			which = 2;
		}
		
		if(which==2) {	
			infile.getline(string2,MAXSIZE);
			if(!check_line(string2)) {
				which = 2;
				continue;
			}
			which = 0;
		}
			
		fscanf(fp3,"%d",&no);
		
		for(i=0;i<no;i++) {
			fprintf(fp,"%s\n",title);
			
			j = 0;
			while(Divide[j]!=-2) {
				if(Divide[j]!=-1)
					fprintf(fp,"%c",string1[Divide[j]]);
				else
					fprintf(fp,"|");
				j++;
			}
			fprintf(fp,"\n");
		
			j = 0;
			while(Divide[j]!=-2) {
				if(Divide[j]!=-1)
					fprintf(fp,"%c",string2[Divide[j]]);
				else
					fprintf(fp,"|");
				j++;
			}
			fprintf(fp,"\n\n");
			
			j = 0;
			while(Divide[j]!=-2) {
				if(Divide[j]==-1) {
					fprintf(fp,"|");
					j++;
					continue;
				}
				if(string1[Divide[j]]==string2[Divide[j]])
					fprintf(fp,"%c",string1[Divide[j]]);
				else
					fprintf(fp,"2");
				j++;
			}
			fprintf(fp,"\n\n");
			
			fscanf(fp4,"%s",string1);	
			j = 0;
			while(Divide[j]!=-2) {
				if(Divide[j]!=-1)
					fprintf(fp,"%c",string1[Divide[j]]);
				else
					fprintf(fp,"|");
				j++;
			}
			fprintf(fp,"\n");
			
			fscanf(fp4,"%s",string1);
			j = 0;
			while(Divide[j]!=-2) {
				if(Divide[j]!=-1)
					fprintf(fp,"%c",string1[Divide[j]]);
				else
					fprintf(fp,"|");
				j++;
			}
			fprintf(fp,"\n");
			
			for(j=0;j<NEWLINE;j++) 
				fprintf(fp,"-");
				
			fprintf(fp,"\n");
		}
	}
	
	fclose(fp);
	fclose(fp2);
	fclose(fp3);
	fclose(fp4);
}

void write_format23(char *prefix, char *filename) {
	char inname[100];
	char *hname = "foroutput";
	char string1[MAXSIZE];
	
	int j,row,column;                                 
	
	FILE *fp,*fp1,*fp2,*fp4;
	
	char *outname = "output2";
	
	strcpy(inname,prefix);
	strncat(inname,".1",2);
	
	fp = fopen(outname,"w");
	fp1 = fopen(filename,"r");
	fp2 = fopen(inname,"r");
	
	fp4 = fopen(hname,"r");
	
	fscanf(fp2,"%d%d",&row,&column);
	fscanf(fp4,"%d%d",&row,&column);
	
	fprintf(fp,"Output format:\ninput genotype\n\noutput haplotype\noutput haplotype\n");
	for(j=0;j<16;j++) 
		fprintf(fp,"-");	
	fprintf(fp,"\n");
	
	fclose(fp);
	
	write_index(column,1);
	
	fp = fopen("output2","a");
	while(fscanf(fp1,"%s",string1)!=EOF) {
		//fprintf(fp,"%s\n\n",string1);
		j = 0;
		while(Divide[j]!=-2) {
			if(Divide[j]!=-1)
				fprintf(fp,"%c",string1[Divide[j]]);
			else
				fprintf(fp,"|");
			j++;
		}
		fprintf(fp,"\n\n");		
		
		fscanf(fp4,"%s",string1);
		j = 0;
		while(Divide[j]!=-2) {
			if(Divide[j]!=-1)
				fprintf(fp,"%c",string1[Divide[j]]);
			else
				fprintf(fp,"|");
			j++;
		}
		fprintf(fp,"\n");
		
		fscanf(fp4,"%s",string1);
		j = 0;
		while(Divide[j]!=-2) {
			if(Divide[j]!=-1)
				fprintf(fp,"%c",string1[Divide[j]]);
			else
				fprintf(fp,"|");
			j++;
		}
		fprintf(fp,"\n");
			
		for(j=0;j<NEWLINE;j++) 
			fprintf(fp,"-");
				
		fprintf(fp,"\n");
	}
	
	fclose(fp);
	fclose(fp1);
	fclose(fp2);
	fclose(fp4);
}

void write_format24(char *prefix, char *filename) {
	char inname[100];
	char *hname = "foroutput";
	char string1[MAXSIZE];
	char title[100];
	int j,row,column,erow;
	int which = 0 ;
	FILE *fp,*fp2,*fp4;
	
	char *outname = "output2";
	
	strcpy(inname,prefix);
	strncat(inname,".1",2);
	
	fp = fopen(outname,"w");
	fp2 = fopen(inname,"r");
	fp4 = fopen(hname,"r");
	ifstream infile(filename);
	
	fscanf(fp2,"%d%d",&erow,&column);
	fscanf(fp4,"%d%d",&row,&column);
	
	fprintf(fp,"Output format:\nlabel\ninput genotype\n\noutput haplotype\noutput haplotype\n");
	for(j=0;j<16;j++) 
		fprintf(fp,"-");	
	fprintf(fp,"\n");
	
	fclose(fp);
	
	write_index(column,1);
	
	fp = fopen("output2","a");
	while(infile) {	
		if(which==0) {
			infile.getline(title,MAXSIZE);
			if(!check_line(title)) {
				which = 0;
				continue;
			}
			which = 1;
		}
		
		if(which==1) {
			infile.getline(string1,MAXSIZE);
			if(!check_line(string1)) {
				which = 1;
				continue;
			}
			which = 0;
		}
			
		//fscanf(fp1,"%s",string1);
		
		fprintf(fp,"%s\n",title);
		
		j = 0;
		while(Divide[j]!=-2) {
			if(Divide[j]!=-1)
				fprintf(fp,"%c",string1[Divide[j]]);
			else
				fprintf(fp,"|");
			j++;
		}
		fprintf(fp,"\n\n");
			
		fscanf(fp4,"%s",string1);
		j = 0;
		while(Divide[j]!=-2) {
			if(Divide[j]!=-1)
				fprintf(fp,"%c",string1[Divide[j]]);
			else
				fprintf(fp,"|");
			j++;
		}
		
		fprintf(fp,"\n");
		
		fscanf(fp4,"%s",string1);
		j = 0;
		while(Divide[j]!=-2) {
			if(Divide[j]!=-1)
				fprintf(fp,"%c",string1[Divide[j]]);
			else
				fprintf(fp,"|");
			j++;
		}
		
		fprintf(fp,"\n");
			
		for(j=0;j<NEWLINE;j++) 
			fprintf(fp,"-");
				
		fprintf(fp,"\n");
	}
	
	fclose(fp);
	fclose(fp2);
	fclose(fp4);
}

void write_format25(char *prefix, char *filename) {
	char inname[100];
	char *hname = "foroutput";
	char string1[MAXSIZE];
	char string2[MAXSIZE];
	char *first,*second;
	int i,j,no,row,column;
	char nucli,newline;
	
	FILE *fp,*fp1,*fp2,*fp3,*fp4;
	
	char *outname = "output2";
	strcpy(inname,prefix);
	strncat(inname,".1",2);
	
	//strcpy(hname,prefix);
	//strncat(hname,".1co",4);
	
	fp = fopen(outname,"w");
	fp1 = fopen(filename,"r");
	fp2 = fopen(inname,"r");
	fp3 = fopen("title","r");
	fp4 = fopen(hname,"r");
	
	fprintf(fp,"Output format:\ninput haplotype\ninput haplotype\n\ngenotype\n\noutput haplotype\noutput haplotype\n");
	for(j=0;j<16;j++) 
		fprintf(fp,"-");	
	fprintf(fp,"\n");
	fclose(fp);
	
	fscanf(fp2,"%d%d",&row,&column);
	fscanf(fp4,"%d%d",&row,&column);
	
	first = new char[column];
	second = new char[column];
	
	write_index(column,1);
	
	for(i=0;i<column;i++) {
		fscanf(fp3,"%c%c%c",&first[i],&second[i],&newline);
	}
	
	fp = fopen("output2","a");	
	while(fscanf(fp1,"%s",string1)!=EOF) {
		fscanf(fp3,"%d",&no);
		fscanf(fp1,"%s",string2);
		
		for(i=0;i<no;i++) {
			//fprintf(fp,"%s\n",string1);
			//fprintf(fp,"%s\n\n",string2);
			j = 0;
			while(Divide[j]!=-2) {
				if(Divide[j]!=-1)
					fprintf(fp,"%c",string1[Divide[j]]);
				else
					fprintf(fp,"|");
				j++;
			}
			fprintf(fp,"\n");
			
			j = 0;
			while(Divide[j]!=-2) {
				if(Divide[j]!=-1)
					fprintf(fp,"%c",string2[Divide[j]]);
				else
					fprintf(fp,"|");
				j++;
			}
			fprintf(fp,"\n\n");
			
			j = 0;
			while(Divide[j]!=-2) {
				if(string1[Divide[j]]==string2[Divide[j]])
					nucli = string1[Divide[j]];
				else
					nucli = 'X';
				
				if(Divide[j]!=-1)
					fprintf(fp,"%c",nucli);
				else
					fprintf(fp,"|");
				j++;
			}
			fprintf(fp,"\n\n");
			
			fscanf(fp4,"%s",string1);
			fscanf(fp4,"%s",string2);
		
			j = 0;
			while(Divide[j]!=-2) {
				if(string1[Divide[j]]=='0')
					nucli = first[Divide[j]];
				else
					nucli = second[Divide[j]];
				
				if(Divide[j]!=-1)
					fprintf(fp,"%c",nucli);
				else
					fprintf(fp,"|");
				j++;
			}
			fprintf(fp,"\n");
			
			j = 0;
			while(Divide[j]!=-2) {
				if(string2[Divide[j]]=='0')
					nucli = first[Divide[j]];
				else
					nucli = second[Divide[j]];
				
				if(Divide[j]!=-1)
					fprintf(fp,"%c",nucli);
				else
					fprintf(fp,"|");
					
				j++;
			}
			fprintf(fp,"\n");
			
			for(j=0;j<NEWLINE;j++) 
				fprintf(fp,"-");
				
			fprintf(fp,"\n");
		}
	}
	
	fclose(fp);
	fclose(fp1);
	fclose(fp2);
	fclose(fp3);
	fclose(fp4);
}

void write_format26(char *prefix, char *filename) {
	char inname[100];
	//char hname[100];
	char *hname = "foroutput";
	char string1[MAXSIZE];
	char string2[MAXSIZE];
	char title[100];
	char *first,*second;
	int i,j,no,row,column;
	char nucli,newline;
	int which = 0;
	FILE *fp,*fp2,*fp3,*fp4;
	
	char *outname = "output2";
	strcpy(inname,prefix);
	strncat(inname,".1",2);
	
	//strcpy(hname,prefix);
	//strncat(hname,".1co",4);
	
	fp = fopen(outname,"w");
	//fp1 = fopen(filename,"r");
	ifstream infile(filename);
	fp2 = fopen(inname,"r");
	fp3 = fopen("title","r");
	fp4 = fopen(hname,"r");
	
	fprintf(fp,"Output format:\nlabel\ninput haplotype\ninput haplotype\n\ngenotype\n\noutput haplotype\noutput haplotype\n");
	for(j=0;j<16;j++) 
		fprintf(fp,"-");	
	fprintf(fp,"\n");
	
	fclose(fp);
	fscanf(fp2,"%d%d",&row,&column);
	fscanf(fp4,"%d%d",&row,&column);
	
	first = new char[column];
	second = new char[column];
	
	write_index(column,1);
	
	for(i=0;i<column;i++) {
		fscanf(fp3,"%c%c%c",&first[i],&second[i],&newline);
	}
	
	fp = fopen("output2","a");
	while(infile) {	
		if(which==0) {
			infile.getline(title,MAXSIZE);
			if(!check_line(title)) {
				which = 0;
				continue;
			}
			which = 1;
		}
		
		if(which==1) {	
			infile.getline(string1,MAXSIZE);
			if(!check_line(string1)) {
				which = 1;
				continue;
			}
			which = 2;
		}
		
		if(which==2) {	
			infile.getline(string2,MAXSIZE);
			if(!check_line(string2)) {
				which = 2;
				continue;
			}
			which = 0;
		}
		
		
		fscanf(fp3,"%d",&no);
		
		for(i=0;i<no;i++) {
			fprintf(fp,"%s\n",title);
			//fprintf(fp,"%s\n",string1);
			//fprintf(fp,"%s\n\n",string2);
			j = 0;
			while(Divide[j]!=-2) {
				if(Divide[j]!=-1)
					fprintf(fp,"%c",string1[Divide[j]]);
				else
					fprintf(fp,"|");
				j++;
			}
			fprintf(fp,"\n");
			
			j = 0;
			while(Divide[j]!=-2) {
				if(Divide[j]!=-1)
					fprintf(fp,"%c",string2[Divide[j]]);
				else
					fprintf(fp,"|");
				j++;
			}
			fprintf(fp,"\n\n");
			
			j = 0;
			while(Divide[j]!=-2) {
				if(string1[Divide[j]]==string2[Divide[j]])
					nucli = string1[Divide[j]];
				else
					nucli = 'X';
				
				if(Divide[j]!=-1)
					fprintf(fp,"%c",nucli);
				else
					fprintf(fp,"|");
				j++;
			}
			fprintf(fp,"\n\n");
			
			fscanf(fp4,"%s",string1);
			fscanf(fp4,"%s",string2);
		
			j = 0;
			while(Divide[j]!=-2) {
				if(string1[Divide[j]]=='0')
					nucli = first[Divide[j]];
				else
					nucli = second[Divide[j]];
				
				if(Divide[j]!=-1)
					fprintf(fp,"%c",nucli);
				else
					fprintf(fp,"|");
				j++;
			}
			fprintf(fp,"\n");
			
			j = 0;
			while(Divide[j]!=-2) {
				if(string2[Divide[j]]=='0')
					nucli = first[Divide[j]];
				else
					nucli = second[Divide[j]];
				
				if(Divide[j]!=-1)
					fprintf(fp,"%c",nucli);
				else
					fprintf(fp,"|");
					
				j++;
			}
			fprintf(fp,"\n");
			
			for(j=0;j<NEWLINE;j++) 
				fprintf(fp,"-");
				
			fprintf(fp,"\n");
			
			
		}
	}
	
	fclose(fp);
	//fclose(fp1);
	fclose(fp2);
	fclose(fp3);
	fclose(fp4);
}

void write_format27(char *prefix, char *filename) {
	char inname[100];
	char string1[MAXSIZE];
	char string2[MAXSIZE];
	char string3[MAXSIZE];
	
	int i,j,row,column;
	
	FILE *fp,*fp1,*fp4;
	
	char *outname = "output2";
	char *hname = "foroutput";
	
	strcpy(inname,prefix);
	strncat(inname,".1",2);
	
	fp = fopen(outname,"w");
	fp1 = fopen("hapsav.1","r");
	fp4 = fopen(hname,"r");
	
	fprintf(fp,"Output format:\ninput haplotype\ninput haplotype\n\ngenotype\n\noutput haplotype\noutput haplotype\n");
	for(j=0;j<16;j++) 
		fprintf(fp,"-");	
	fprintf(fp,"\n");
	
	fclose(fp);

		
	fscanf(fp1,"%d%d%d",&row,&column,&column);
	fscanf(fp4,"%d%d",&row,&column);
	
	write_index(column,1);
	
	fp = fopen("output2","a");
	while(fscanf(fp1,"%s",string1)!=EOF) {
		fscanf(fp1,"%s",string2);
		fscanf(fp1,"%s",string3);
		
		i = 0;
		while(Divide[i]!=-2) {
			if(Divide[i]!=-1)
				fprintf(fp,"%c",string2[Divide[i]]);
			else
				fprintf(fp,"|");
			i++;
		}
		fprintf(fp,"\n");

		i = 0;
		while(Divide[i]!=-2) {
			if(Divide[i]!=-1)
				fprintf(fp,"%c",string3[Divide[i]]);
			else
				fprintf(fp,"|");
			i++;
		}
		fprintf(fp,"\n\n");
		
		i = 0;
		while(Divide[i]!=-2) {
			if(Divide[i]!=-1)
				fprintf(fp,"%c",string1[Divide[i]]);
			else
				fprintf(fp,"|");
			i++;
		}
		fprintf(fp,"\n\n");
		
		fscanf(fp4,"%s",string2);
		fscanf(fp4,"%s",string3);
		
		i = 0;
		while(Divide[i]!=-2) {
			if(Divide[i]!=-1)
				fprintf(fp,"%c",string2[Divide[i]]);
			else
				fprintf(fp,"|");
			i++;
		}
		fprintf(fp,"\n");
		
		i = 0;
		while(Divide[i]!=-2) {
			if(Divide[i]!=-1)
				fprintf(fp,"%c",string3[Divide[i]]);
			else
				fprintf(fp,"|");
			i++;
		}
		fprintf(fp,"\n");
		
		//i = 0;
		//while(Divide[i]!=-2) {
		for(j=0;j<NEWLINE;j++) 
			fprintf(fp,"-");
				
		fprintf(fp,"\n");	
	}
	
	fclose(fp);
	fclose(fp1);
	fclose(fp4);
}

void write_tree2(char *prefix,double is) {
	char treefile[100],temp[1000];
	FILE *fp1,*fp2;
	
	//strcpy(outfile,prefix);
	//strncat(outfile,".out",4);
	char *outfile = "output2";
	
	strcpy(treefile,prefix);
	strncat(treefile,".1ct",4);
	
	fp1 = fopen(outfile,"a");
	fp2 = fopen(treefile,"r");
	fprintf(fp1,"The tree is:\n");
	
	while(fscanf(fp2,"%s",temp)!=EOF) {
		fprintf(fp1,"%s ",temp);	
	}
	
	fprintf(fp1,"\n\n");
	
	double result = pow(2.0,is);
	
	if(is>=30)
		fprintf(fp1,"The tree is not unique and there are 2^%d possibilities",(int)is);
	else if(is!=0)
		fprintf(fp1,"The tree is not unique and there are %d possibilities\n",(int)result);
	else
		fprintf(fp1,"The tree is unique\n");
			
	fclose(fp1);
	fclose(fp2);
}

void parse_output2(int format,int alen) {
	char output1[10*MAXSIZE],output2[MAXSIZE],output3[MAXSIZE],output4[MAXSIZE],output5[MAXSIZE],space[MAXSIZE];
	FILE *fp;
	int len,times,i,j,header,cnum = 0,ocnum = 0;
	fp = fopen("tempout","w");
	ifstream infile("output2");
	
	if(format==1 || format==5|| format==7)
		header = 9;
	else if(format==2 || format==6)
		header = 10;
	else if(format==3)
		header = 6;
	else if(format==4)
		header = 7;
					
	for(i=0;i<header;i++) {
		infile.getline(output1,MAXSIZE);
		fprintf(fp,"%s\n",output1);
	}
	fclose(fp);
	write_index(alen,2);
	fp = fopen("tempout","a");
	
	while(infile) {
		cnum = 0;
		if(format==2 || format==4 || format==6) {
			infile.getline(output1,MAXSIZE); // label
			if(strncmp(output1,"The",3)==0)
				break;
			fprintf(fp,"%s\n",output1);
		}
		
			if(format!=3 && format!=4) {
				infile.getline(output1,MAXSIZE);
				if(strncmp(output1,"The",3)==0)
					break;
				infile.getline(output2,MAXSIZE);
				infile.getline(space,MAXSIZE);
			}		
			infile.getline(output3,MAXSIZE);
			
			if(format==3)
				if(strncmp(output3,"The",3)==0)
					break;
					
			infile.getline(space,MAXSIZE);
			infile.getline(output4,MAXSIZE);
			infile.getline(output5,MAXSIZE);
			
			len = strlen(output3);
			times = len/NEWLINE;
				
			for(i=0;i<times;i++) {
				ocnum = cnum;
				for(j=i*NEWLINE;j<i*NEWLINE+NEWLINE;j++) {
					if(output3[j]=='|')
						cnum++;
				}
				
				fprintf(fp,"length: %d ~ %d\n",i*NEWLINE+1-ocnum,i*NEWLINE+NEWLINE-cnum);
				
				if(format!=3 && format!=4) {
					for(j=i*NEWLINE;j<i*NEWLINE+NEWLINE;j++) 
						fprintf(fp,"%c",output1[j]);
				
					fprintf(fp,"\n");
				
					for(j=i*NEWLINE;j<i*NEWLINE+NEWLINE;j++)
						fprintf(fp,"%c",output2[j]);
					fprintf(fp,"\n\n");
				}
				for(j=i*NEWLINE;j<i*NEWLINE+NEWLINE;j++)
					fprintf(fp,"%c",output3[j]);
				fprintf(fp,"\n\n");
				
				for(j=i*NEWLINE;j<i*NEWLINE+NEWLINE;j++)
					fprintf(fp,"%c",output4[j]);
				fprintf(fp,"\n");
				
				for(j=i*NEWLINE;j<i*NEWLINE+NEWLINE;j++)
					fprintf(fp,"%c",output5[j]);
				fprintf(fp,"\n\n");
				
			}
			
			if(NEWLINE*times<len) {
				if(len>NEWLINE)
					fprintf(fp,"length: %d ~ %d\n",NEWLINE*times+1-cnum,alen);
				
				if(format!=3 && format!=4) {
					for(j=NEWLINE*times;j<len;j++)  {
						fprintf(fp,"%c",output1[j]);
						if(output1[j]=='|')
							cnum++;
					}
					fprintf(fp,"\n");
			
					for(j=NEWLINE*times;j<len;j++) 
						fprintf(fp,"%c",output2[j]);
					fprintf(fp,"\n\n");
				}
				
				for(j=NEWLINE*times;j<len;j++) 
					fprintf(fp,"%c",output3[j]);
				fprintf(fp,"\n\n");
			
				for(j=NEWLINE*times;j<len;j++) 
					fprintf(fp,"%c",output4[j]);
				fprintf(fp,"\n");
			
				for(j=NEWLINE*times;j<len;j++) 
					fprintf(fp,"%c",output5[j]);
				fprintf(fp,"\n");
			}
		
			infile.getline(output1,MAXSIZE);
			fprintf(fp,"%s\n",output1);
		
	}
	
	if(format==3) {
		for(i=0;i<20;i++)
			output1[i] = output3[i];
	}
	
	// print tree
	while(infile) {
		len = strlen(output1);
		times = len/NEWLINE;
		
		for(i=0;i<times;i++) {
			for(j=i*NEWLINE;j<i*NEWLINE+NEWLINE;j++)
				fprintf(fp,"%c",output1[j]);
			fprintf(fp,"\n");
		}
		for(j=NEWLINE*times;j<len;j++) 
			fprintf(fp,"%c",output1[j]);
		fprintf(fp,"\n");
				
		infile.getline(output1,10*MAXSIZE);	
	}
	
	fclose(fp);
	infile.close();
	
	system("cp tempout output2");
	system("rm tempout");
}
