int main() { #ifdef Debug freopen("1572.in", "r", stdin); #endif int n; char input[10]; while (scanf("%d", &n) == 1 && n) { memset(G, 0, sizeof(G)); while (n--) { scanf("%s", input); for (int i = 0; i < 4; ++i) { for (int j = 0; j < 4; ++j) { if (i != j) { connect(input[2*i], input[2*i+1], input[2*j], input[2*j+1]); } } } } if (hasCircle()) { printf("unbounded\n"); } else { printf("bounded\n"); } } return 0; }
bool hasCircle(vector<vector<int>>& graph, vector<bool>& inGraph, vector<bool>& visited, int current) { visited[current] = true; inGraph[current] = true; for(auto adj : graph[current]) { if(!visited[adj]) { if(hasCircle(graph, inGraph, visited, adj)) return true; } else if(inGraph[adj]) { return true; } } inGraph[current] = false; return false; }
bool canFinish(int numCourses, vector<pair<int, int>>& prerequisites) { vector<vector<int>> graph(numCourses, vector<int>()); vector<bool> visited(numCourses, false); vector<bool> inGraph(numCourses, false); for(auto p : prerequisites) { graph[p.first].push_back(p.second); } for(int i=0; i<numCourses; i++) { if(!visited[i]) { if(hasCircle(graph, inGraph, visited, i)) return false; } } return true; }