#pragma GCC optimize("O3,unroll-loops") #pragma GCC target("avx2,bmi,bmi2,lzcnt,popcnt") #include // #include // #include // #include #define rep(i,a,b) for(int i=(a);i<(b);i++) #define rrep(i,a,b) for(int i=(b)-1;i>=(a);i--) #define all(x) begin(x),end(x) #define sz(x) (int)(x).size() using namespace std; // using namespace atcoder; // using ll=long long; // using ld=long double; // using vll=vector; // using vvll=vector; // using vi=vector; // using vvi=vector; // using pll=pair; // using pi=pair; // using mint=modint998244353; // using mint=modint1000000007; // using mint2=static_modint<2>; // using BoostPoint=boost::polygon::point_data; // using Voronoi=boost::polygon::voronoi_diagram; // using mint=LazyMontgomeryModInt<998244353>; // using vm=vector; // using vvm=vector; int main() { /** * 天才構築、苦手すぎる(確かに面白いですが) * * A_{ij} = W*r_{ij} + c_{ij} として考えます * * もし全ての(i,j)について * * r_{ij} + r_{i(j+1)} = H - 1 * * c_{ij} + c_{(i+1)j} = W + 1 * * であれば、問題の条件が満たされます(S = 2(HW+1)) * * そのため、以下のように定義します * * r_{ij} = (j が奇数?) H - 1 - i : i * * c_{ij} = (r_{ij} が奇数?) W - j : j + 1 */ ios::sync_with_stdio(false); cin.tie(nullptr); int H,W; cin>>H>>W; cout<<"Yes\n"; char row[8000]; rep(i,0,H){ char* p=row; int a=W*i,b=W*(H-1-i); int x=i&1,y=(H-1-i)&1; rep(j,0,W){ p=to_chars(p,row+sizeof(row),(j&1)?b+(y?W-j:j+1):a+(x?W-j:j+1)).ptr; *p++=' '; } p[-1]='\n'; cout.write(row,p-row); } }