#include #include #include using namespace std; using u32 = unsigned int; constexpr int inf = 987654321; struct UnionFind { UnionFind(const int n); void unite(int x, int y); int find(int x); int size_of(int x); // x が含まれるグループの要素数を返す。 vector par; }; UnionFind::UnionFind(const int n) : par(n, -1) {} int UnionFind::find(int x) { return par[x] < 0 ? x : (par[x] = find(par[x])); } void UnionFind::unite(int x, int y) { x = find(x), y = find(y); if(x == y) { return; } if(par[x] > par[y]) { swap(x, y); } par[x] += par[y]; par[y] = x; } int UnionFind::size_of(int x) { return -par[find(x)]; } u32 uy = time(NULL); u32 xorshift32() { uy ^= uy << 13; uy ^= uy >> 17; uy ^= uy << 5; return uy; } // knuth shuffle template void shuffle(vector &v, int n) { if(n == 0) { return; } for(u32 i=n-1; i>=1; --i) { u32 k = xorshift32() % (i + 1); if(k == i) { continue; } swap(v[k], v[i]); } } int main(void) { int w, n; scanf("%d%d", &w, &n); vector J(n); for(int i=0; i C(m); for(int i=0; i> G(n, vector(m, true)); for(int i=0; i> edges; int V = n + m + 2; int s = n + m, t = s + 1; for(int i=0; i= inf) { cut = inf; } } } mini = min(mini, cut); hell:; } fprintf(stderr, "%d\n", mini); puts(mini >= w ? "SHIROBAKO" : "BANSAKUTSUKITA"); return 0; }