Description
Input
Output
Sample Input
3
A+00A+A+ 00B+D+A- B-C+00C+
Sample Output
bounded
Hint
题解
//It is made by Awson on 2017.9.19
#include <map>
#include <set>
#include <cmath>
#include <ctime>
#include <queue>
#include <stack>
#include <cstdio>
#include <string>
#include <vector>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <algorithm>
#define LL long long
#define Max(a, b) ((a) > (b) ? (a) : (b))
#define Min(a, b) ((a) < (b) ? (a) : (b))
#define Abs(a) ((a) < 0 ? (-(a)) : (a))
using namespace std; int n; int getnum(char x, char y) {
if (x == '') return ;
return x-'A'+*(y == '+');
}
void work() {
char ch[];
bool mp[][] = {};
int in[] = {};
for (int T = ; T <= n; T++) {
scanf("%s", ch+);
for (int i = ; i <= ; i += )
for (int j = ; j <= ; j += )
if (i != j) {
int x = getnum(ch[i], ch[i+]);
int y = getnum(ch[j], ch[j+]);
if (x == || y == ) continue;
if (y < ) y += ;
else y -= ;
mp[x][y] = true;
}
}
for (int i = ; i <= ; i++)
for (int j = ; j <= ; j++)
if (mp[i][j]) in[j]++;
int cnt = ;
queue<int>Q;
while (!Q.empty()) Q.pop();
for (int i = ; i <= ; i++)
if (!in[i]) Q.push(i);
while (!Q.empty()) {
int u = Q.front(); Q.pop();
cnt++;
for (int i = ; i <= ; i++)
if (mp[u][i]) {
in[i]--;
if (!in[i]) Q.push(i);
}
}
printf("%s\n", cnt < ? "unbounded" : "bounded");
} int main() {
freopen("gene.in", "r", stdin);
freopen("gene.out", "w", stdout);
while (~scanf("%d", &n))
work();
return ;
}