#include #include #include using namespace std; class range {private: struct I{int x;int operator*(){return x;}bool operator!=(I& lhs){return x> 30)) + mti); mt[mti] &= 0xffffffffU; } } void init_by_array(vector init_key) { int key_length = init_key.size(); init_genrand(19880731U); // まいぷる int i = 1, j = 0; int k = N > key_length ? N : key_length; for( ; k; k--) { mt[i] = (mt[i] ^ ((mt[i-1] ^ (mt[i-1] >> 30)) * 1664525U)) + init_key[j] + j; mt[i] &= 0xffffffffU; i++; j++; if(i >= N) { mt[0] = mt[N-1]; i = 1; } if(j >= key_length) { j = 0; } } for(k=N-1; k; k--) { mt[i] = (mt[i] ^ ((mt[i-1] ^ (mt[i-1] >> 30)) * 1566083941U)) - i; mt[i] &= 0xffffffffU; i++; if(i >= N) { mt[0] = mt[N-1]; i = 1; } } mt[0] = 0x80000000U; } unsigned int genrand_int32(void) { unsigned int y; static unsigned int mag01[2] = {0x0U, MATRIX_A}; if(mti >= N) { if(mti == N + 1) { init_genrand(5489U); } int kk; for(kk=0; kk> 1) ^ mag01[y & 0x1U]; } for(; kk> 1) ^ mag01[y & 0x1U]; } y = (mt[N-1] & UPPER_MASK) | (mt[0] & LOWER_MASK); mt[N-1] = mt[M-1] ^ (y >> 1) ^ mag01[y & 0x1U]; mti = 0; } y = mt[mti++]; y ^= (y >> 11); y ^= (y << 7) & 0x9d2c5680U; y ^= (y << 15) & 0xefc60000U; y ^= (y >> 18); return y; } template T choice(vector &v) { int n = v.size(); return v[genrand_int32() % n]; } class Point { public: int x, y; Point(int _x, int _y) : x(_x), y(_y) {}; }; vector solve(int t, int a, int b) { // if(t < max(a, b)) { return vector(); } map kortx, korty; kortx[-1] = "<"; kortx[ 0] = ""; kortx[ 1] = ">"; korty[-1] = "v"; korty[ 0] = ""; korty[ 1] = "^"; vector d; for(int x : range(-1, 2)) { for(int y : range(-1, 2)) { if(x == 0 && y == 0) { continue; } d.push_back(Point(x, y)); } } int t2 = t - 4; int cx = 0, cy = 0; vector res; for(int i : range(min(t2, max(a, b)))) { string s; if(i <= b) { s += '>'; cx++; } if(i <= a) { s += '^'; cy++; } res.push_back(s); } int left2 = t2 - res.size(); for(int i : range(left2/2)) { res.push_back("<");// cx--; res.push_back(">");// cx++; } for(int times : range(100000)) { int x1 = cx, y1 = cy; int left = t - res.size(); vector extra; for(int i : range(left)) { Point p = choice(d); x1 += p.x; y1 += p.y; extra.push_back(kortx[p.x] + korty[p.y]); } if(x1 == b && y1 == a) { res.insert(res.end(), extra.begin(), extra.end()); return res; } } return vector(); } int main(void) { time_t seed = time(0); vector init; init.push_back(0x123); init.push_back(0x234); init.push_back(0x345); init.push_back(0x456); init.push_back(seed); init_by_array(init); int t, a, b; scanf("%d%d%d", &t, &a, &b); vector res = solve(t, a, b); if(!res.size()) { puts("NO"); return 0; } puts("YES"); for(int i : range(res.size())) { puts(res[i].c_str()); } return 0; }