#include <cstdio>
#include <cstring>
#include <iostream>
#include <string>
#include <cmath>
#include <bitset>
#include <vector>
#include <map>
#include <set>
#include <queue>
#include <deque>
#include <algorithm>
#include <complex>
#include <unordered_map>
#include <unordered_set>
#include <random>
#include <cassert>
#include <fstream>
#include <utility>
#include <functional>
#include <time.h>
#include <stack>
#include <array>
#define popcount __builtin_popcount
using namespace std;
typedef long long int ll;
typedef pair<int, int> P;
bitset<50000> bs[50000];
bool prevx1[505][100010];
bool prevx2[505][100010];
bool prevy1[505][100010];
int main()
{
    int n, m, t;
    cin>>n>>m>>t;
    int x[100010], y[100010];
    for(int i=0; i<m; i++){
        cin>>x[i]>>y[i];
        x[i]--; y[i]--;
    }
    if(t==2){
        set<P> st;
        for(int i=0; i<m; i++) st.insert({x[i], y[i]});
        int a=-1, b=-1;
        for(int i=0; i<n; i++){
            for(int j=i+1; j<n; j++){
                if(st.find({i, j})==st.end()){
                    a=i, b=j;
                    break;
                }
            }
            if(a>=0) break;
        }
        if(a>=0){
            string ans;
            for(int i=0; i<m; i++){
                if(x[i]==a || x[i]==b){
                    ans+='^';
                }else{
                    ans+='v';
                }
            }
            cout<<ans<<endl;
            return 0;
        }
        bool dp[505][505]={};
        for(int i=0; i<n; i++) for(int j=i+1; j<n; j++) dp[i][j]=1;
        for(int i=0; i<m; i++){
            dp[x[i]][y[i]]=dp[y[i]][x[i]]=0;
            bool myon[505]={};
            for(int j=0; j<n; j++){
                if(j==y[i] || j==x[i]) continue;
                if(dp[j][x[i]] || dp[x[i]][j]){
                    myon[j]=1, prevy1[j][i]=1;
                }
            }
            for(int j=0; j<n; j++){
                if(j==x[i] || j==y[i]) continue;
                if(dp[j][y[i]] || dp[y[i]][j]){
                    if(j<x[i]) dp[j][x[i]]=1, prevx1[j][i]=1;
                    else dp[x[i]][j]=1, prevx1[j][i]=1;
                }else if(dp[j][x[i]] || dp[x[i]][j]){
                    prevx2[j][i]=1;
                }
            }
            for(int j=0; j<n; j++){
                if(myon[j]){
                    if(j<y[i]) dp[j][y[i]]=1;
                    else dp[y[i]][j]=1;
                }
            }
        }
        for(int i=0; i<n; i++){
            for(int j=i+1; j<n; j++){
                if(dp[i][j]){
                    a=i, b=j;
                }
            }
        }
        if(a==-1){
            cout<<-1<<endl;
            return 0;
        }
        string ans;
        for(int i=0; i<m; i++) ans+='v';
        int k=2*m;
        for(int i=m-1; i>=0; i--){
            if(a==x[i]){
                if(prevx1[b][i]){
                    ans[i]='^';
                    a=y[i];
                }else if(prevx2[b][i]){
                    ans[i]='^';
                }
            }else if(a==y[i]){
                if(prevy1[b][i]){
                    a=x[i];
                }
            }else if(b==x[i]){
                if(prevx1[a][i]){
                    ans[i]='^';
                    b=y[i];
                }else if(prevx2[a][i]){
                    ans[i]='^';
                }
            }else if(b==y[i]){
                if(prevy1[a][i]){
                    b=x[i];
                }
            }else{
                continue;
            }
            if(a>b) swap(a, b);
        }
        cout<<ans<<endl;
        return 0;
    }
    for(int i=0; i<n; i++) bs[i][i]=1;
    for(int i=m-1; i>=0; i--){
        bs[x[i]]|=bs[y[i]];
        bs[y[i]]|=bs[x[i]];
    }
    bitset<50000> bsa=bs[0];
    for(int i=1; i<n; i++){
        bsa&=bs[i];
    }
    int a=-1;
    for(int i=0; i<n; i++){
        if(bsa[i]){
            a=i; break;
        }
    }
    if(a==-1){
        cout<<-1<<endl;
        return 0;
    }
    bool ok[50050]={};
    ok[a]=1;
    string ans;
    for(int i=m-1; i>=0; i--){
        if(ok[x[i]] && !ok[y[i]]){
            ans+='^';
        }else{
            ans+='v';
        }
        ok[x[i]]|=ok[y[i]]; ok[y[i]]|=ok[x[i]];
    }
    reverse(ans.begin(), ans.end());
    cout<<ans<<endl;
    return 0;
}


Measured memory_bytes: 307456