#include <stdio.h>

void print_matrix(int a[8]);

/*
 * Restituisce True (1) se i1,j1 e' compatibile con i2, j2, False (0) altrimenti.
 * */
int check(int i1, int j1, int i2, int j2){
    return !(((i1-j1)==(i2-j2))||(i1==i2)||(j1==j2)||((i1+j1)==(i2+j2)));
}

/* Verifica se i, j compatibile con tutte le righe precedenti
 * */
int check_all(int a[], int i, int j){
    int k;
    for(k=0; k<i; k++)
        if (check(k,a[k],i,j)==0) return 0;
    return 1;
}

int build(int a[8], int i){
    int j;
    if (i==7) return 1;
    i=i+1;
    for(j=1; j<8; j++){
        if (check_all(a,i,j)==1){
            a[i]=j;
            if (build(a, i)==1) return 1;
        }
    }
    print_matrix(a);
    printf("\n");
    return 0;
}


void print_matrix(int a[8]){
    int i, j;
    for(i=0; i<8; i++){
        for(j=0; j<8; j++)
            if (a[i]==j) printf (" R");
            else printf(" _");
        printf("\n");
    }
}

int main(){
    int a[8]={0}, r, i;
    a[0]=0;
    r=build(a,0);
    if (r) {
        for(i=0; i<8; i++)
            printf("(%d, %d) ", i, a[i]);
        printf("\n");
        print_matrix(a);
    } else
        printf("Soluzione non trovata\n");

}

