#include <bits/stdc++.h>
#define FR first
#define SE second
#define last last2

using namespace std;

typedef bitset<50001> bs;
typedef pair<int,int> pr;

pr e[100005];

namespace Solve1 {

bs f[50005];

int dp(int n,int m) {
  for(int i=1;i<=n;i++) f[i].flip(i);
  for(int i=m;i>0;i--) {
  	int u=e[i].FR,v=e[i].SE;
  	f[u]|=f[v];
  	f[v]|=f[u];
  }
  bs cur;
  cur.set();
  for(int i=1;i<=n;i++) cur&=f[i];
  if (cur.any()) return cur._Find_first();
  else return 0;
}

bool ans[100005],vis[50005];

void solve(int n,int m) {
  int x=dp(n,m);
  if (!x) {
  	puts("-1");
  	return;
  }
  vis[x]=1;
  for(int i=m;i>0;i--) {
  	int u=e[i].FR,v=e[i].SE;
  	if (vis[u]&&!vis[v]) {
  		vis[v]=1;
  		ans[i]=1;
	  }
	else if (vis[v]&&!vis[u]) {
		vis[u]=1;
		ans[i]=0;
	}
  }
  for(int i=1;i<=m;i++) putchar((ans[i])?'^':'v');
  printf("\n");
}

}

namespace Solve2 {

map <pr,bool> mp;

bool f[505][505];
vector <pr> trans[505][505];

void output1(int x,int y,int m) {
  for(int i=1;i<=m;i++)
    if (e[i].FR==x||e[i].FR==y) putchar('^');
    else putchar('v');
  printf("\n");
} 

int r[505][505];
bool ans[100005];

void output2(int x,int y,int n,int m) {
  for(int i=1;i<n;i++)
    for(int j=i+1;j<=n;j++) r[i][j]=(int)trans[i][j].size()-1;
  int last=0;
  for(;;) {
  	while (r[x][y]>=0&&trans[x][y][r[x][y]].FR<=last) r[x][y]--;
  	if (r[x][y]<0) break;
  	pr t=trans[x][y][r[x][y]--];
  	for(int i=last+1;i<t.FR;i++)
  	  if (e[i].FR==x||e[i].FR==y) ans[i]=1;
  	  else ans[i]=0;
  	last=t.FR;
  	int u=e[t.FR].FR,v=e[t.FR].SE;
  	if (t.SE) {
  		if (x==u) x=v; else y=v;
  		ans[t.FR]=0;
	  } 
	else {
		if (x==v) x=u; else y=u;
		ans[t.FR]=1;
	}
	if (x>y) swap(x,y);
  }
  for(int i=last+1;i<=m;i++)
    if (e[i].FR==x||e[i].FR==y) ans[i]=1;
    else ans[i]=0;
  for(int i=1;i<=m;i++) putchar((ans[i])?'^':'v');
  printf("\n");
}

pr dp(int n,int m) {
  for(int i=1;i<n;i++)
    for(int j=i+1;j<=n;j++) f[i][j]=1;
  for(int i=m;i>0;i--) {
  	int u=e[i].FR,v=e[i].SE;
    f[u][v]=0;
    for(int j=1;j<u;j++)
      if (!f[j][u]&&f[j][v]) {
      	f[j][u]=1;
      	trans[j][u].push_back(pr(i,1));
	  }
	  else if (!f[j][v]&&f[j][u]) {
	  	f[j][v]=1;
	  	trans[j][v].push_back(pr(i,0));
	  }
    for(int j=u+1;j<v;j++)
      if (!f[u][j]&&f[j][v]) {
      	f[u][j]=1;
      	trans[u][j].push_back(pr(i,1));
	  }
	  else if (!f[j][v]&&f[u][j]) {
	  	f[j][v]=1;
	  	trans[j][v].push_back(pr(i,0));
	  }
    for(int j=v+1;j<=n;j++)
      if (!f[u][j]&&f[v][j]) {
      	f[u][j]=1;
      	trans[u][j].push_back(pr(i,1));
	  }
	  else if (!f[v][j]&&f[u][j]) {
	  	f[v][j]=1;
	  	trans[v][j].push_back(pr(i,0));
	  }
  }
  for(int i=1;i<n;i++)
    for(int j=i+1;j<=n;j++)
      if (f[i][j]) return pr(i,j);
  return pr(-1,-1);
}

void solve(int n,int m) {
  for(int i=1;i<=m;i++) mp[e[i]]=1;
  for(int i=1;i<n;i++)
    for(int j=i+1;j<=n;j++)
      if (!mp.count(pr(i,j))) {
      	output1(i,j,m);
      	return;
	  }
  pr t=dp(n,m);
  if (t.FR==-1) {
  	puts("-1");
  	return;
  }
  output2(t.FR,t.SE,n,m);
}

}

int main() {
  int n,m,T;
  scanf("%d%d%d",&n,&m,&T);
  for(int i=1;i<=m;i++) {
  	int x,y;
  	scanf("%d%d",&x,&y);
  	e[i]=pr(x,y);
  }
  if (T==1) Solve1::solve(n,m);
  else Solve2::solve(n,m);
  return 0;
}

Measured memory_bytes: 312960