1 #include<cstring>
2 #include<cstdio>
3 #include<iostream>
4 #include<algorithm>
5 #include<queue>
6 #include<map>
7 #include<vector>
8 #include<string>
9
10 using namespace std;
11
12
13 int dir[][5]={{0,0},{0,1},{1,0},{1,1}};
14 int g[10][10];
15 string s;
16
17 int cur;
18 int in[15];
19 vector<int>out[10];
20
21 void init()
22 {
23 for(int i=0;i<10;i++) out[i].clear(),in[i]=0;
24
25 }
26
27 void toposort()
28 {
29 queue<int>que;
30 for(int i=1;i<cur;i++)
31 if(in[i]==0) que.push(i);
32
33 while(que.size())
34 {
35 int k=que.front();
36 que.pop();
37
38 in[k]--;
39
40 for(int i=0;i<out[k].size();i++)
41 {
42 in[out[k][i]]--;
43 if(in[out[k][i]]==0) que.push(out[k][i]);
44 }
45 }
46
47 for(int i=1;i<=9;i++)
48 if(in[i]>0) {cout<<"THESE WINDOWS ARE BROKEN"<<endl;return ;}
49
50 cout<<"THESE WINDOWS ARE CLEAN"<<endl;
51 }
52
53 int main()
54 {
55 while(cin>>s&&s!="ENDOFINPUT")
56 {
57 for(int i=0;i<4;i++)
58 for(int j=0;j<4;j++)
59 cin>>g[i][j];
60
61 cin>>s;
62
63 init();
64
65 cur=1;//用于表示窗口编号
66 for(int i=0;i<3;i++)//扫描每一个窗口,建立有向图,记录入度,出度
67 for(int j=0;j<3;j++)
68 {
69 map<int,int>mp;
70 for(int k=0;k<4;k++)
71 {
72 int x=i+dir[k][0];
73 int y=j+dir[k][1];
74 if(g[x][y]!=cur&&mp[g[x][y]]==0)
75 {
76 mp[g[x][y]]=1;//防止重复的窗口覆盖
77 in[g[x][y]]++;
78 out[cur].push_back(g[x][y]);
79 }
80 }
81 cur++;
82 }
83
84 toposort();
85 }
86 }