DFS
#include<bits/stdc++.h>
using namespace std;
const int N=25;
int n;
int a[N][N],ans[N*N];
int dx[]={1,0,-1,0};
int dy[]={0,-1,0,1};
int h[N],z[N];
bool vis[N][N];
void dfs(int x,int y,int pos){
ans[pos]=x*n+y;
if(x==n-1 && y==n-1 &&h[n-1]==1 && z[n-1]==1){
for(int j=0;j<n-1;j++){
if(h[j]>0||z[j]>0) return ;//如果最后一步之前,还有大于0的数,则没有拔完箭,返回
}
for(int i=0;i<=pos;i++){
cout<<ans[i]<<" ";
}
return ;
}
vis[x][y]=1;
h[x]--;z[y]--;
for(int k=0;k<4;k++){
int tx=x+dx[k];
int ty=y+dy[k];
if(vis[tx][ty]==0 && tx>=0 &&tx<n && ty>=0 && ty<n && h[tx]>0 && z[ty]>0){//判断边界,并判断这行这列,是否还有箭,没箭不能dfs
dfs(tx,ty,pos+1);
}
}
ans[pos]=0;
h[x]++;z[y]++;
vis[x][y]=0;
}
int main(){
cin>>n;
for(int i=0;i<n;i++) cin>>z[i];
for(int j=0;j<n;j++) cin>>h[j];
dfs(0,0,0);
return 0;
}