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

int main()
{
   char s[128]; //stringa
   char p[128]; // prima stringa
   char sl[128]; //stringa piu' lunga
   char *nomefile; //nome del file di output 
   char stringheConcatenate[128]=""; //concatenata
   FILE *pfin, *pfout;
   int lung =1;
   int Nstringhe =1; //conto le stringhe per concatenarle fino alla quinta
   
   
   /* apertura del file di input */
   pfin = fopen("stringhe.txt", "r");
   if (pfin == NULL) // controlla se il file viene aperto 
   {
      printf("Non posso aprire il file %s\n", "stringhe.txt");
      exit(-1);
   }
   fscanf(pfin,"%s", p); //leggo la prima stringa
   strcpy(sl, p); //la prima stringa per ora e' la piu' lunga

   strcpy(stringheConcatenate, p); 
   
   while(!feof(pfin)) //leggo tutte le stringhe
   {
      fscanf(pfin,"%s", s);
      if (!strcmp(p,s)) // se sono uguali
         lung++; // incremento il contatore
         
      // calcolo la piu' lunga   
      if (strlen(s)>strlen(sl)) 
         strcpy(sl, s); 
         
      // concateno fino alla quinta
      if (Nstringhe <=5)
         strcat(stringheConcatenate, s);
      
      Nstringhe++;
   }
   
   fflush(pfin);
   fclose(pfin);
   
   // alloco la memoria per sl per .txt e /0
   nomefile = (char *) calloc (strlen(sl)+4+1, sizeof(char));

   if (nomefile == NULL) { 
  		printf("E' finita la memoria");
		  exit(-1);
   }
   
   
   //nome file e' "stringa piu' lunga".txt
   sprintf(nomefile, "%s.txt", sl); 
   
   
   /* apertura del file di output */
   pfout = fopen(nomefile, "w");

   if (pfout == NULL) // controllo se il file viene aperto 
   {
      printf("Non posso aprire il file %s\n", nomefile);
      exit(-1);
   }
   fprintf(pfout, "%d", lung);
   
   //stampo la stringa concatenata
   printf("La stringa concatenata e' %s", stringheConcatenate);
       
   fflush(pfout);
   fclose(pfout);
   
   
   free(nomefile);
   fflush(stdin);
   getchar();
   
   return 0;
}