#include<bits/stdc++.h>
#define FOR(i, a, b) for (int i = (a), _b = (b); i <= _b; i++)
#define FORD(i, b, a) for (int i = (b), _a = (a); i >= _a; i--)
#define REP(i, n) for (int i = 0, _n = (n); i < _n; i++)
#define FORE(i, v) for (__typeof((v).begin()) i = (v).begin(); i != (v).end(); i++)
#define ALL(v) (v).begin(), (v).end()
#define IS_INF(x) (std::isinf(x))
#define IS_NAN(x) (std::isnan(x))
#define fi first
#define se second
#define MASK(i) (1LL << (i))
#define BIT(x, i) (((x) >> (i)) & 1)
#define div ___div
#define next ___next
#define prev ___prev
#define left ___left
#define right ___right
#define __builtin_popcount __builtin_popcountll
using namespace std;
template<class X, class Y>
bool minimize(X &x, const Y &y) {
X eps = 1e-9;
if (x > y + eps) {
x = y;
return true;
} else return false;
}
template<class X, class Y>
bool maximize(X &x, const Y &y) {
X eps = 1e-9;
if (x + eps < y) {
x = y;
return true;
} else return false;
}
template<class T>
T Abs(const T &x) {
return (x < 0 ? -x : x);
}
/* Author: Van Hanh Pham */
/** END OF TEMPLATE - ACTUAL SOLUTION COMES HERE **/
#define MAX 400400
int numItem, numGroup, numInfo;
vector<int> adj[MAX];
int numNode, numComp, cnt;
int low[MAX], num[MAX], compID[MAX], mark[MAX];
stack<int> st;
vector<int> bigAdj[MAX];
int revDeg[MAX];
#define MAX_NODE(x) (x)
#define MIN_NODE(x) ((x) <= numItem ? (x) : (x) + numGroup)
int getNumber(char *input) {
int x;
return sscanf(input, "%d", &x) == 1 ? x : -1;
}
void loadGraph(void) {
scanf("%d%d%d", &numItem, &numGroup, &numInfo);
FOR(i, 1, numGroup) {
int x, y; scanf("%d%d", &x, &y);
adj[MIN_NODE(i + numItem)].push_back(MIN_NODE(x));
adj[MIN_NODE(i + numItem)].push_back(MIN_NODE(y));
adj[MAX_NODE(x)].push_back(MAX_NODE(i + numItem));
adj[MAX_NODE(y)].push_back(MAX_NODE(i + numItem));
}
char str[10]; memset(str, 0, sizeof str);
REP(love, numInfo) {
scanf("%s", str);
int x = getNumber(str);
if (x < 0) {
int group, item; scanf("%d%d", &group, &item);
if (strcmp(str, "MAX") == 0) {
adj[MAX_NODE(group)].push_back(item);
} else {
adj[item].push_back(MIN_NODE(group));
}
} else {
int y; scanf("%s", str); scanf("%d", &y);
if (str[0] == '>') swap(x, y);
adj[MAX_NODE(x)].push_back(MIN_NODE(y));
}
}
numNode = numItem + 2 * numGroup;
}
void dfs_tarjan(int u) {
low[u] = num[u] = ++cnt;
st.push(u);
FORE(it, adj[u]) {
int v = *it;
if (compID[v] > 0) continue;
if (num[v] == 0) {
dfs_tarjan(v);
minimize(low[u], low[v]);
} else minimize(low[u], num[v]);
}
if (low[u] == num[u]) {
numComp++;
while (true) {
int v = st.top(); st.pop();
compID[v] = numComp;
if (v <= numItem) {
assert(mark[numComp] == 0);
mark[numComp] = v;
}
if (u == v) break;
}
}
}
void process(void) {
FOR(i, 1, numNode) if (num[i] == 0) dfs_tarjan(i);
FOR(i, 1, numNode) FORE(jt, adj[i]) if (compID[i] != compID[*jt]) {
bigAdj[compID[i]].push_back(compID[*jt]);
revDeg[compID[*jt]]++;
}
vector<int> res;
priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> q;
#define ADD_COMP(x) q.push(make_pair(mark[x], x));
FOR(i, 1, numComp) if (revDeg[i] == 0) ADD_COMP(i);
while (!q.empty()) {
int u = q.top().se; q.pop();
if (mark[u] > 0) res.push_back(mark[u]);
FORE(it, bigAdj[u]) {
int v = *it;
if (--revDeg[v] == 0) ADD_COMP(v);
}
}
FORE(it, res) printf("%d ", *it); printf("\n");
}
int main(void) {
#ifdef ONLINE_JUDGE
freopen("sbbcffffs.inp", "r", stdin);
freopen("sbbcffffs.out", "w", stdout);
#endif // THEMIS
loadGraph();
process();
return 0;
}
/*** LOOK AT MY CODE. MY CODE IS AMAZING :D ***/
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KI2RlZmluZSBGT1IoaSwgYSwgYikgZm9yIChpbnQgaSA9IChhKSwgX2IgPSAoYik7IGkgPD0gX2I7IGkrKykKI2RlZmluZSBGT1JEKGksIGIsIGEpIGZvciAoaW50IGkgPSAoYiksIF9hID0gKGEpOyBpID49IF9hOyBpLS0pCiNkZWZpbmUgUkVQKGksIG4pIGZvciAoaW50IGkgPSAwLCBfbiA9IChuKTsgaSA8IF9uOyBpKyspCiNkZWZpbmUgRk9SRShpLCB2KSBmb3IgKF9fdHlwZW9mKCh2KS5iZWdpbigpKSBpID0gKHYpLmJlZ2luKCk7IGkgIT0gKHYpLmVuZCgpOyBpKyspCiNkZWZpbmUgQUxMKHYpICh2KS5iZWdpbigpLCAodikuZW5kKCkKI2RlZmluZSBJU19JTkYoeCkgICAoc3RkOjppc2luZih4KSkKI2RlZmluZSBJU19OQU4oeCkgICAoc3RkOjppc25hbih4KSkKI2RlZmluZSBmaSAgIGZpcnN0CiNkZWZpbmUgc2UgICBzZWNvbmQKI2RlZmluZSBNQVNLKGkpICgxTEwgPDwgKGkpKQojZGVmaW5lIEJJVCh4LCBpKSAoKCh4KSA+PiAoaSkpICYgMSkKI2RlZmluZSBkaXYgICBfX19kaXYKI2RlZmluZSBuZXh0ICAgX19fbmV4dAojZGVmaW5lIHByZXYgICBfX19wcmV2CiNkZWZpbmUgbGVmdCAgIF9fX2xlZnQKI2RlZmluZSByaWdodCAgIF9fX3JpZ2h0CiNkZWZpbmUgX19idWlsdGluX3BvcGNvdW50IF9fYnVpbHRpbl9wb3Bjb3VudGxsCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CnRlbXBsYXRlPGNsYXNzIFgsIGNsYXNzIFk+CiAgICBib29sIG1pbmltaXplKFggJngsIGNvbnN0IFkgJnkpIHsKICAgICAgICBYIGVwcyA9IDFlLTk7CiAgICAgICAgaWYgKHggPiB5ICsgZXBzKSB7CiAgICAgICAgICAgIHggPSB5OwogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9IGVsc2UgcmV0dXJuIGZhbHNlOwogICAgfQp0ZW1wbGF0ZTxjbGFzcyBYLCBjbGFzcyBZPgogICAgYm9vbCBtYXhpbWl6ZShYICZ4LCBjb25zdCBZICZ5KSB7CiAgICAgICAgWCBlcHMgPSAxZS05OwogICAgICAgIGlmICh4ICsgZXBzIDwgeSkgewogICAgICAgICAgICB4ID0geTsKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfSBlbHNlIHJldHVybiBmYWxzZTsKICAgIH0KdGVtcGxhdGU8Y2xhc3MgVD4KICAgIFQgQWJzKGNvbnN0IFQgJngpIHsKICAgICAgICByZXR1cm4gKHggPCAwID8gLXggOiB4KTsKICAgIH0KCi8qIEF1dGhvcjogVmFuIEhhbmggUGhhbSAqLwoKLyoqIEVORCBPRiBURU1QTEFURSAtIEFDVFVBTCBTT0xVVElPTiBDT01FUyBIRVJFICoqLwoKI2RlZmluZSBNQVggICA0MDA0MDAKaW50IG51bUl0ZW0sIG51bUdyb3VwLCBudW1JbmZvOwp2ZWN0b3I8aW50PiBhZGpbTUFYXTsKaW50IG51bU5vZGUsIG51bUNvbXAsIGNudDsKaW50IGxvd1tNQVhdLCBudW1bTUFYXSwgY29tcElEW01BWF0sIG1hcmtbTUFYXTsKc3RhY2s8aW50PiBzdDsKdmVjdG9yPGludD4gYmlnQWRqW01BWF07CmludCByZXZEZWdbTUFYXTsKCiNkZWZpbmUgTUFYX05PREUoeCkgKHgpCiNkZWZpbmUgTUlOX05PREUoeCkgKCh4KSA8PSBudW1JdGVtID8gKHgpIDogKHgpICsgbnVtR3JvdXApCgppbnQgZ2V0TnVtYmVyKGNoYXIgKmlucHV0KSB7CiAgaW50IHg7CiAgcmV0dXJuIHNzY2FuZihpbnB1dCwgIiVkIiwgJngpID09IDEgPyB4IDogLTE7Cn0KCnZvaWQgbG9hZEdyYXBoKHZvaWQpIHsKICBzY2FuZigiJWQlZCVkIiwgJm51bUl0ZW0sICZudW1Hcm91cCwgJm51bUluZm8pOwogIEZPUihpLCAxLCBudW1Hcm91cCkgewogICAgaW50IHgsIHk7IHNjYW5mKCIlZCVkIiwgJngsICZ5KTsKICAgIGFkaltNSU5fTk9ERShpICsgbnVtSXRlbSldLnB1c2hfYmFjayhNSU5fTk9ERSh4KSk7CiAgICBhZGpbTUlOX05PREUoaSArIG51bUl0ZW0pXS5wdXNoX2JhY2soTUlOX05PREUoeSkpOwogICAgYWRqW01BWF9OT0RFKHgpXS5wdXNoX2JhY2soTUFYX05PREUoaSArIG51bUl0ZW0pKTsKICAgIGFkaltNQVhfTk9ERSh5KV0ucHVzaF9iYWNrKE1BWF9OT0RFKGkgKyBudW1JdGVtKSk7CiAgfQoKICBjaGFyIHN0clsxMF07IG1lbXNldChzdHIsIDAsIHNpemVvZiBzdHIpOwogIFJFUChsb3ZlLCBudW1JbmZvKSB7CiAgICBzY2FuZigiJXMiLCBzdHIpOwogICAgaW50IHggPSBnZXROdW1iZXIoc3RyKTsKICAgIGlmICh4IDwgMCkgewogICAgICBpbnQgZ3JvdXAsIGl0ZW07IHNjYW5mKCIlZCVkIiwgJmdyb3VwLCAmaXRlbSk7CiAgICAgIGlmIChzdHJjbXAoc3RyLCAiTUFYIikgPT0gMCkgewogICAgICAgIGFkaltNQVhfTk9ERShncm91cCldLnB1c2hfYmFjayhpdGVtKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBhZGpbaXRlbV0ucHVzaF9iYWNrKE1JTl9OT0RFKGdyb3VwKSk7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIGludCB5OyBzY2FuZigiJXMiLCBzdHIpOyBzY2FuZigiJWQiLCAmeSk7CiAgICAgIGlmIChzdHJbMF0gPT0gJz4nKSBzd2FwKHgsIHkpOwogICAgICBhZGpbTUFYX05PREUoeCldLnB1c2hfYmFjayhNSU5fTk9ERSh5KSk7CiAgICB9CiAgfQoKICBudW1Ob2RlID0gbnVtSXRlbSArIDIgKiBudW1Hcm91cDsKfQoKdm9pZCBkZnNfdGFyamFuKGludCB1KSB7CiAgbG93W3VdID0gbnVtW3VdID0gKytjbnQ7CiAgc3QucHVzaCh1KTsKCiAgRk9SRShpdCwgYWRqW3VdKSB7CiAgICBpbnQgdiA9ICppdDsKICAgIGlmIChjb21wSURbdl0gPiAwKSBjb250aW51ZTsKICAgIGlmIChudW1bdl0gPT0gMCkgewogICAgICBkZnNfdGFyamFuKHYpOwogICAgICBtaW5pbWl6ZShsb3dbdV0sIGxvd1t2XSk7CiAgICB9IGVsc2UgbWluaW1pemUobG93W3VdLCBudW1bdl0pOwogIH0KCiAgaWYgKGxvd1t1XSA9PSBudW1bdV0pIHsKICAgIG51bUNvbXArKzsKICAgIHdoaWxlICh0cnVlKSB7CiAgICAgIGludCB2ID0gc3QudG9wKCk7IHN0LnBvcCgpOwogICAgICBjb21wSURbdl0gPSBudW1Db21wOwogICAgICBpZiAodiA8PSBudW1JdGVtKSB7CiAgICAgICAgYXNzZXJ0KG1hcmtbbnVtQ29tcF0gPT0gMCk7CiAgICAgICAgbWFya1tudW1Db21wXSA9IHY7CiAgICAgIH0KICAgICAgaWYgKHUgPT0gdikgYnJlYWs7CiAgICB9CiAgfQp9Cgp2b2lkIHByb2Nlc3Modm9pZCkgewogIEZPUihpLCAxLCBudW1Ob2RlKSBpZiAobnVtW2ldID09IDApIGRmc190YXJqYW4oaSk7CgogIEZPUihpLCAxLCBudW1Ob2RlKSBGT1JFKGp0LCBhZGpbaV0pIGlmIChjb21wSURbaV0gIT0gY29tcElEWypqdF0pIHsKICAgIGJpZ0Fkaltjb21wSURbaV1dLnB1c2hfYmFjayhjb21wSURbKmp0XSk7CiAgICByZXZEZWdbY29tcElEWypqdF1dKys7CiAgfQoKICB2ZWN0b3I8aW50PiByZXM7CiAgcHJpb3JpdHlfcXVldWU8cGFpcjxpbnQsIGludD4sIHZlY3RvcjxwYWlyPGludCwgaW50Pj4sIGdyZWF0ZXI8cGFpcjxpbnQsIGludD4+PiBxOwojZGVmaW5lIEFERF9DT01QKHgpIHEucHVzaChtYWtlX3BhaXIobWFya1t4XSwgeCkpOwogIEZPUihpLCAxLCBudW1Db21wKSBpZiAocmV2RGVnW2ldID09IDApIEFERF9DT01QKGkpOwogIHdoaWxlICghcS5lbXB0eSgpKSB7CiAgICBpbnQgdSA9IHEudG9wKCkuc2U7IHEucG9wKCk7CiAgICBpZiAobWFya1t1XSA+IDApIHJlcy5wdXNoX2JhY2sobWFya1t1XSk7CgogICAgRk9SRShpdCwgYmlnQWRqW3VdKSB7CiAgICAgIGludCB2ID0gKml0OwogICAgICBpZiAoLS1yZXZEZWdbdl0gPT0gMCkgQUREX0NPTVAodik7CiAgICB9CiAgfQoKICBGT1JFKGl0LCByZXMpIHByaW50ZigiJWQgIiwgKml0KTsgcHJpbnRmKCJcbiIpOwp9CgppbnQgbWFpbih2b2lkKSB7CiNpZmRlZiBPTkxJTkVfSlVER0UgCiAgICBmcmVvcGVuKCJzYmJjZmZmZnMuaW5wIiwgInIiLCBzdGRpbik7CiAgICBmcmVvcGVuKCJzYmJjZmZmZnMub3V0IiwgInciLCBzdGRvdXQpOwojZW5kaWYgLy8gVEhFTUlTCgogIGxvYWRHcmFwaCgpOwogIHByb2Nlc3MoKTsKICByZXR1cm4gMDsKfQoKLyoqKiBMT09LIEFUIE1ZIENPREUuIE1ZIENPREUgSVMgQU1BWklORyA6RCAqKiov