C'č un esercizio in C che non mi riesce del tutto, č questo:

codice:
Scrivere un programma che legga da tastiera una sequenza A di N stringhe di
lunghezza variabile. L'anagramma principale di una stringa S e l'anagram-
ma di S ottenuto ordinando i suoi simboli individualmente. Ad esempio,
l'anagramma principale di abracadabra e aaaaabbcdrr. Notare che l'ana-
gramma principale di una stringa e unico e che stringhe diverse possono avere
lo stesso anagramma principale.
Il programma deve raggruppare le stringhe di A aventi lo stesso anagram-
ma principale e restituire le stringhe di ciascun gruppo in ordine lessicogra-
co non-decrescente. I gruppi devono essere restituiti in ordine lessicograco
non-decrescente del corrispondente anagramma principale.
L'input e formattato nel seguente modo. La prima riga contiene la lun-
ghezza N della sequenza. Si assuma che N sia maggiore di zero. Le righe
successive contengono le N stringhe che compongono la sequenza A, una
per riga. Si puo assumere che le stringhe abbiano lunghezza inferiore a 20
caratteri.
L'output deve contenere solo e soltanto un gruppo di stringhe per riga.
Le stringhe dello stesso gruppo devono essere separate da uno spazio.

Esempio
Input
7
pluto
abra
pippo
raba
baar
oppip
lupto

Output

abra baar raba
oppip pippo
lupto pluto
Il problema č che il mio codice stampa l'output ma lo restituisce in anagramma cioč:

codice:
aabr aabr aabr
ioppp ioppp
lupto lupto
Il mio codice č:

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

#define MAXLEN 1000

char **leggi(int *N){
	char **A;
	scanf("%d", N);
	int i;
	A = malloc(sizeof(char*)*(*N));
	for(i=0;i<*N;i++){
	A[i] = malloc((char)sizeof(MAXLEN)+1);
	scanf("%s",A[i]);
	}
	return A;
		}

char *ordina(char *a){
	int i,j,prossimo;
	for(i=0;i<strlen(a);i++){
		prossimo = a[i];
		j = i;
	while((j>0) && (a[j-1]>prossimo)){
		a[j] = a[j-1];
		j--;
		}
	a[j] = prossimo;
	}
	return a;
			}

int anagramma( char *s1, char *s2){
	int i,min;
	s1 = ordina(s1);
	s2 = ordina(s2);
	if (strlen(s1)<strlen(s2)) min = strlen(s1);
	else min = strlen(s2);
	int trovato = 0;
	for(i=0;i<min && !trovato; i++){
		if (s1[i]<s2[i]){ trovato = 1; return -1;}
		else if (s1[i]==s2[i]) i++;
		else { trovato = 1; return 1; }	
		}
	if (trovato == 0) return 0;
					
			}

int compare(const void *s1, const void *s2){
	return anagramma(*(char **)s1,*(char **)s2);
		}

int main(){
	int N,i;
	char **A;
	A = leggi(&N);
	qsort(A,N,sizeof(char *),compare);
	for(i=0;i<N;i++) printf("%s ",A[i]);		
		}