#include<bits/stdc++.h>
#define L(i, j, k) for(int i = j, i##E = k; i <= i##E; i++)
#define R(i, j, k) for(int i = j, i##E = k; i >= i##E; i--)
#define ll long long
#define ull unsigned long long
#define db double
#define pii pair<int, int>
#define mkp make_pair
#define push_back psb 
using namespace std;
void Min(int &x, int y) { if(x > y) x = y; }
void Max(int &x, int y) { if(x < y) x = y; }
const int N = 1e6 + 7;
int n, m, c[N], a[N], b[N];
int head[N], edge_id;
struct edge {
	int to, id, next;
	int ans;
} e[N << 1];
void add_edge(int u, int v, int id) {
	++edge_id, e[edge_id].next = head[u], e[edge_id].id = id, e[edge_id].to = v, head[u] = edge_id;
}
int ans[N], dfn[N], idtot;
void dfs(int x, int fa) {
	dfn[x] = ++idtot;
	for(int i = head[x]; i; i = e[i].next) {
		int v = e[i].to;
		if(v == fa) continue;
		if(dfn[v]) {
			if(dfn[x] > dfn[v]) e[i].ans = 1;
			continue;
		}
		e[i].ans = 1, dfs(v, x); 
	}
}
int main() {
	ios::sync_with_stdio(false);
	cin.tie(0), cout.tie(0);
	cin >> n >> m;
	L(i, 1, m) cin >> a[i] >> b[i];
	L(i, 1, n) cin >> c[i];
	L(i, 1, m) if(c[a[i]] == c[b[i]]) add_edge(a[i], b[i], i), add_edge(b[i], a[i], -i);
	L(i, 1, n) if(!dfn[i]) dfs(i, -1);
	L(i, 1, edge_id) if(e[i].ans) {
		if(e[i].id > 0) ans[e[i].id] = 1;
		else ans[-e[i].id] = 0;
	}
	L(i, 1, m) {
		if(c[a[i]] > c[b[i]]) cout << "->\n";
		else if(c[a[i]] < c[b[i]]) cout << "<-\n";
		else {
			if(!ans[i]) cout << "->\n";
			else cout << "<-\n";
		}
	}
	return 0;
} 
#include <bits/stdc++.h>
#include <numeric>
// #include <atcoder/modint>
using namespace std;
// using namespace atcoder;

// using mint = long double;
// using mint = modint998244353;
// using mint = modint1000000007;

typedef long long ll;
typedef pair<ll, ll> P;
typedef pair<P, ll> T;
typedef pair<ll, vector<ll> > Pd;

const ll INF = 1e18;
const ll fact_table = 32008;

priority_queue <ll> pql;
priority_queue <P> pqp;
//big priority queue
// priority_queue <ll, vector<ll>, greater<ll> > pqls;
priority_queue <P, vector<P>, greater<P> > pqps;
//small priority queue
//top pop

ll dx[8] = {1, 0, -1, 0, 1, 1, -1, -1};
ll dy[8] = {0, 1, 0, -1, -1, 1, 1, -1};
//↓,→,↑,←

/*
#define endl "\n"
#ifdef ENJAPMA
#undef endl
#endif
*/

#define p(x) cout<<x<<endl;
#define el cout<<endl;
#define pe(x) cout<<x<<" ";
#define ps(x) cout<<fixed<<setprecision(25)<<x<<endl;
#define pu(x) cout<<(x);
#define pb push_back
#define lb lower_bound
#define ub upper_bound
#define pc(x) cout << x << ",";
#define rep(i, n) for (ll i = 0; i < (n); i ++)
#define rep2(i, a, b) for (ll i = a; i <= (b); i++)
#define rep3(i, a, b) for (ll i = a; i >= (b); i--)
#define all(c) begin(c), end(c)

typedef vector<ll> vec;
typedef vector<vector<ll>> mat;

// vec v(n) -> 長さnのベクトルを宣言
// mat dp(h, vec(w)) -> h * w の行列を宣言

const ll mod = 998244353ll;
// const ll mod = 1000000007ll;

ll mypow(ll a, ll b, ll m = mod) {ll x = 1; while (b) {while (!(b & 1)) {(a *= a) %= m; b >>= 1;}(x *= a) %= m; b--;} return x;}
vec rv(ll read) { vec res(read); for (int i = 0; i < read; i++) { cin >> res[i]; } return res;}
void YES(bool cond) { if (cond) { p("YES");} else { p("NO");} return;}
void Yes(bool cond) { if (cond) { p("Yes");} else { p("No");} return;}
void line() { p("--------------------"); return;}

/*
ll fact[fact_table + 5], rfact[fact_table + 5];

void c3_init() {
    fact[0] = rfact[0] = 1;
    for (ll i = 1; i <= fact_table; i++) {
        fact[i] = (fact[i - 1] * i) % mod;
    }
    rfact[fact_table] = mypow(fact[fact_table], mod - 2, mod);
    for (ll i = fact_table; i >= 1; i--) {
        rfact[i - 1] = rfact[i] * i;
        rfact[i - 1] %= mod;
    }
    return;
}
ll c3(ll n, ll r) {
    return (((fact[n] * rfact[r]) % mod ) * rfact[n - r]) % mod;
}
*/

bool icpc = false;
bool multicase = false;

ll n, m;

bool solve() {
    ll a, b, c;
    cin >> a >> b >> c;
    assert(1 <= a);
    assert(1 <= b);
    assert(1 <= c);
    a %= 10;
    ll r = mypow(b, c, 8ll);
    r += 4;
    ll re = 1;
    if (a == 0) {
        p(0);
        return true;
    }
    for (int i = 0; i < r; i++) {
        re *= a;
        re %= 10;
    }
    p(re % 10);
    return true;
}

int main() {

    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    if (icpc) {
        while (solve());
        return 0;
    }
    ll q, testcase = 1;
    if (multicase) {
        cin >> q;
    } else {
        q = 1;
    }
    while (q--) {
        // pu("Case ");pu("#");pu(testcase);pu(": ");
        solve();
        testcase++;
    }

// solve();
    return 0;
}