Provo a formalizzare meglio la soluzione che ti avevo già proposto.
Non ho tempo di scriverti del codice ora, quindi ti indico qualcosa in PSEUDOCODICE... e poichè è un esercizio, così provi a pensarci un po' 
codice:
main()
{
lung = 2;
do
{
crea_array(lung)
permuta_array()
lung = lung + 2
} while (soluzione_non_trovata)
}
permuta_array(array, pos)
{
if pos == array.length - 2
{
controlla_condizioni()
scambia_ultime_2_posizioni
controlla_condizioni()
}
else
{
for (index = pos; index < array.length - 2; index++)
{
scambia_pos_con_index
permuta_array(array, pos - 1)
riscambia_pos_con_index
}
}
}
In pratica il cuore dell'algoritmo è il metodo permuta_array: calcola tutte le permutazioni possibili per l'array ricevuto (spero sia tutto corretto, ovviamente non ho modo di fare test); è una procedura ricorsiva.
Come ti avevo detto, l'algoritmo non è ottimizzato... ma prova a vedere se ti viene qualche idea. In caso, posta di nuovo!