Cand verifici conditia cu doua numere alaturata, verifici doar in partea dreapta, dar nu si in partea stanga. De exemplu, pt 2 3 1 4 , verifici doar daca 2 este urmat de 3, dar nu si daca 3 este urmat 2.
Deci in functia valid(int i), modifica al doilea if astfel:
if( (p[x[i]] - p[x[i-1]) == 1 || ( (p[x[i-1]] - p[x[i]]) == 1 ) return 0;