1 #include <bits/stdc++.h> 2 using namespace std; 3 #define rep(i,a,b) for(int i = a;i <= b;++ i) 4 #define per(i,a,b) for(int i = a;i >= b;-- i) 5 #define mem(a,b) memset((a),(b),sizeof((a))) 6 #define FIN freopen("in.txt","r",stdin) 7 #define IO ios_base::sync_with_stdio(0),cin.tie(0) 8 #define pb push_back 9 typedef long long LL; 10 typedef pair<int, int> PIR; 11 const int N = 1e+5; 12 13 int n, use, stu[N]; 14 bool vis[N]; 15 vector <int> G[N]; 16 struct Node{ 17 LL x, y; 18 LL r; 19 }node[N]; 20 21 bool judge(int i, int j){ 22 LL xi = node[i].x-node[j].x, yi = node[i].y-node[j].y; 23 LL ri = node[i].r+node[j].r; 24 return (xi*xi+yi*yi) == ri*ri; 25 } 26 void Test(){ 27 cout << "-----------TEST----------" << endl; 28 rep(i, 1, n){ 29 cout << i << ": "; 30 rep(j, 0, (int)G[i].size()-1) cout << G[i][j] << " "; 31 cout << endl; 32 } 33 cout << endl; 34 } 35 36 void bfs(){ 37 queue <PIR> Q; 38 mem(stu, -1); 39 mem(vis, false); 40 use = 1; 41 Q.push(PIR(1, 0)); 42 stu[1] = 0; 43 vis[1] = true; 44 while(!Q.empty()){ 45 PIR pir = Q.front(); Q.pop(); 46 int u = pir.first, st = pir.second; 47 if(u == n){ 48 if(st^0 == 1) cout << "-"; 49 LL gcd = __gcd(node[n].r, node[1].r); 50 cout << node[1].r/gcd << ":" << node[n].r/gcd << endl; 51 return ; 52 } 53 rep(i, 0, (int)G[u].size()-1){ 54 int v = G[u][i]; 55 if(stu[v] != -1 && stu[v]^st == 0){ 56 cout << "The input gear cannot move." << endl; 57 return ; 58 } 59 60 if(vis[v]) continue; 61 if(stu[v] == -1 || (stu[v] != -1 && stu[v]^st == 1)){ 62 stu[v] = st^1; 63 vis[v] = true; 64 Q.push(PIR(v, st^1)); 65 } 66 } 67 } 68 cout << "The input gear is not connected to the output gear." << endl; 69 return ; 70 } 71 int main() 72 {IO; 73 //FIN; 74 cin >> n; 75 rep(i, 1, n) cin >> node[i].x >> node[i].y >> node[i].r; 76 rep(i, 1, n) rep(j, i+1, n) if(judge(i, j)) { G[i].pb(j); G[j].pb(i); } 77 //Test(); 78 bfs(); 79 return 0; 80 }