-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathgiantpizza.cpp
More file actions
115 lines (102 loc) · 2.93 KB
/
giantpizza.cpp
File metadata and controls
115 lines (102 loc) · 2.93 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
#include <bits/stdc++.h>
using namespace std;
/* TYPES */
#define ll long long
#define ld long double
#define pii pair<int, int>
#define pll pair<long long, long long>
#define vi vector<int>
#define vll vector<long long>
#define mii map<int, int>
#define si set<int>
#define sc set<char>
/* CONSTANTS */
#define f first
#define s second
#define sp <<" "<<
#define endl '\n'
const int MAXN = 1e5+5;
const ll MOD = 1e9+7;
const ll HMOD = 998244353;
const ll INF = 1e9;
const ld PI = 3.1415926535897932384626433832795;
const ld EPS = 1e-9;
/* UTILS */
#define read(type) readInt<type>()
ll min(ll a,int b) { if (a<b) return a; return b; }
ll min(int a,ll b) { if (a<b) return a; return b; }
ll max(ll a,int b) { if (a>b) return a; return b; }
ll max(int a,ll b) { if (a>b) return a; return b; }
ll gcd(ll a,ll b) { if (b==0) return a; return gcd(b, a%b); }
ll lcm(ll a,ll b) { return a/gcd(a,b)*b; }
string to_upper(string a) { for (int i=0;i<(int)a.size();++i) if (a[i]>='a' && a[i]<='z') a[i]-='a'-'A'; return a; }
string to_lower(string a) { for (int i=0;i<(int)a.size();++i) if (a[i]>='A' && a[i]<='Z') a[i]+='a'-'A'; return a; }
bool prime(ll a) { if (a==1) return 0; for (int i=2;i<=round(sqrt(a));++i) if (a%i==0) return 0; return 1; }
void yes() { cout<<"YES\n"; }
void no() { cout<<"NO\n"; }
/* FUNCTIONS */
#define sz(a) ((int)a.size())
#define all(a) (a).begin(), (a).end()
#define fr(i,s,e) for(ll i=(s);i<(e);i++)
#define frn(i,n) fr(i,0,(n))
#define cfr(i,s,e) for(ll i=(s);i<=(e);i++)
#define rfr(i,e,s) for(ll i=(e)-1;i>=(s);i--)
#define afr(a) for(auto &u:a)
#define pb push_back
#define eb emplace_back
/* DEBUGGING && PRINTING */
#define printv(a) {for(auto u:a) cout<<u<<" "; cout<<endl;}
#define printm(a) {for(auto u:a) cout<<u.f sp u.s<<endl;}
/* All Rcuruired define Pre-Processors and typedef Constants */
typedef long int int32;
typedef unsigned long int uint32;
typedef long long int int64;
typedef unsigned long long int uint64;
map<int, vi> adj;
set<int> vis;
vi ans;
int dfs(int u, set<int> &cur) {
if(vis.count(u)) return cur.count(-u);
vis.insert(u); cur.insert(u);
if(!ans[abs(u)]) ans[abs(u)] = u > 0 ? 1 : 2;
int ans = 0;
for(int v : adj[u]) ans |= dfs(v, cur);
return ans;
}
void solve() {
int n, m; cin >> n >> m;
ans = vector<int>(m+1);
for(int i=0; i<n; i++) {
char xt, yt;
int xn, yn;
cin >> xt >> xn >> yt >> yn;
int x = xt == '+' ? xn : -xn, y = yt == '+' ? yn : -yn;
adj[-x].pb(y); adj[-y].pb(x);
}
set<int> cur;
for(int i=1; i<=m; i++) {
if(dfs(i, cur)) {
cout << "IMPOSSIBLE" << endl;
return;
}
cur.clear();
if(dfs(-i, cur)) {
cout << "IMPOSSIBLE" << endl;
return;
}
cur.clear();
}
for(int i=1; i<=m; i++) cout << (ans[i] == 1 ? '+' : '-') << " ";
cout << endl;
return;
}
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
int tc = 1;
// cin >> tc;
cfr(t, 1, tc) {
// cout << "Case #" << t << ": ";
solve();
}
}