#pragma GCC optimize("Ofast") #pragma GCC target("avx2") char*mmap(); #define rd_skip() while(*rp++>=48) #define rd(v) int v=0;{int _c;while(_c=*rp++-48,_c>=0)v=v*10+_c;} char wbuf[1<<27]; #define WTHI(v) {long _z=v,_n=0,_d=0;while(++_n,_d=_d<<8|0x30|_z%10,_z/=10);*(long*)wp=_d;wp+=_n;} long numstrs[1024]; int numstrlens[1024]; void mknumstrs(){ for(int i=0;i<1024;++i){ long _z=i,n=0,_d=0; while(++n,_d=_d<<8|0x30|_z%10,_z/=10); numstrs[i]=_d<<8|0x20; numstrlens[i]=n+1; } } #define wt(v) (*(long*)wp=numstrs[v],wp+=numstrlens[v]) main(){ mknumstrs(); char*rp=mmap(0l,1l<<28,1,2,0,0ll); char*wp=wbuf; rd_skip(); while(*rp){ rd(n); rd(m); if(n==1&&m==1){ *(long*)wp=*(long*)" 0 1 1"; wp+=6; continue; } if((n|m)&1){ *(long*)wp=*(long*)" -1"; wp+=3; continue; } *wp++=32; WTHI(m*n-1); for(int y=0;y=0;){ wt(y+2); wt(x+2); wt(y+1); wt(x+1); wt(y+1); wt(x+2); wt(y+2); wt(x+1); } } } } write(1,wbuf,wp-wbuf); _exit(0); }