```clike=
#include<stdio.h>
#define N 4
int counter(int bd[N][N], int n){
int cnt = 0;
for(int i = 0; i < n; i++){
for(int j = 0; j < n; j++){
cnt += (bd[i][j]);
}
}
return cnt;
}
void printans(int ans[], int a){
for(int i = 0; i < a; i++){
printf("%d%c", ans[i], " \n"[i == a - 1]);
}
return;
}
int in(int r, int c, int n){
return(r >= 0 && r < n && c >= 0 && c < n);
}
void reverse(int bd[N][N], int r, int c, int n){
bd[r][c] ^= 1;
int dr[] = {-1, 0, 1, 0};
int dc[] = {0, 1, 0, -1};
for(int i = 0; i < 4; i++){
int nr = r + dr[i], nc = c + dc[i];
if(in(nr, nc, n)){
bd[nr][nc] ^= 1;
}
}
}
void solve(int idx, int visited[N][N],
int bd[N][N], int n, int nowans[], int nowa, int ans[], int *a){
if(nowa >= *a)
return;
int cnt = counter(bd, n);
if(!cnt){
for(int i = 0; i < nowa; i++){
ans[i] = nowans[i];
}
*a = nowa;
return;
}
if(idx >= n * n)
return;
int r = idx / n, c = idx % n;
if(!visited[r][c]){
visited[r][c] = 1;
reverse(bd, r, c, n);
nowans[nowa] = idx;
solve(idx + 1, visited, bd, n, nowans, nowa + 1, ans, a);
reverse(bd, r, c, n);
visited[r][c] = 0;
}
solve(idx + 1, visited, bd, n, nowans, nowa, ans, a);
}
int main(){
int bd[N][N] = {{0}};
int n; scanf("%d", &n);
int pos;
while(scanf("%d", &pos) == 1){
int r = pos / n, c = pos % n;
bd[r][c] = 1;
}
int visited[N][N] = {{0}};
int nowans[N * N], a = N * N + 1;
int ans[N * N];
solve(0, visited, bd, n, nowans, 0, ans, &a);
printans(ans, a);
}
```