#include<iostream>
#include<cstdio>
#include<cstring>
#include<bitset>
#include<map>
#include<vector>
using namespace std;
const pair<int,int> no=make_pair(-1,2333333);
#define N 50050
inline int read(){
	int x=0,f=1;
	char c=getchar();
	while(c<'0'||c>'9'){
		if(c=='-')f=-1;
		c=getchar();
	}
	while(c>='0'&&c<='9'){
		x=(x<<1)+(x<<3)+c-'0';
		c=getchar();
	}
	return x*f;
}
int n,m,T,x[N<<1],y[N<<1],col[N<<1];
void Output(){
	for(int i=1;i<=m;++i){
		putchar(col[i]?'^':'v');
	}
	putchar('\n');
}
namespace Task_1{
	bitset<N> to[N];
	int ok[N];
	void Find(int k){
		ok[x[k]]=ok[y[k]]=1;
		for(int i=k-1;i>=1;--i){
			if(!ok[x[i]]&&!ok[y[i]])continue;
			if(ok[x[i]])col[i]=1;
			ok[x[i]]=ok[y[i]]=1;
		}
	}
	void Solve(){
		for(int i=1;i<=n;++i){
			to[i][i]=1;
		}
		for(int i=1;i<=m;++i){
			to[x[i]]=to[y[i]]=to[x[i]]|to[y[i]];
			if((int)to[x[i]].count()==n){
				Find(i);
				Output();
				return;
			}
		}
		printf("-1\n");
	}
}
namespace Task_2{
	map<int,vector<pair<int,int> > > mp; 
	void Solve(){
		if(n==2){
			puts("-1");return;
		}
		for(int i=m;i>=1;--i){
			mp[x[i]].emplace_back(y[i],i);
			mp[y[i]].emplace_back(x[i],i);
		}
		int A=x[1],B=y[1]+1;
		if(B>n)A=x[1]-1,B=y[1];
		if(A<1)A=x[1]+1,B=y[1];
		for(int i=1;i<=m;++i){
			while(!mp[A].empty()&&mp[A].back().second<=i)mp[A].pop_back();
			while(!mp[B].empty()&&mp[B].back().second<=i)mp[B].pop_back();
			auto tA=mp[A].empty()?no:mp[A].back();
			auto tB=mp[B].empty()?no:mp[B].back();
			bool rev=(tA.second<tB.second&&tA.first==B)||(tA.second>=tB.second&&tB.first==A);
			if(x[i]==A||y[i]==A){
				col[i]=rev^(x[i]==A);
				if(rev)A=(x[i]==A)?y[i]:x[i];
			}
			else if(x[i]==B||y[i]==B){
				col[i]=rev^(x[i]==B);
				if(rev)B=(x[i]==B)?y[i]:x[i];	
			}
		}
		Output();
	}
}
int main(){
	n=read(),m=read(),T=read();
	for(int i=1;i<=m;++i){
		x[i]=read(),y[i]=read();
	}
	if(T==1){
		Task_1::Solve();
	}
	else{
		Task_2::Solve();
	}
	return 0;
}
