Go: package main

import (
	"bufio"
	"fmt"
	"os"
	"strconv"
	"strings"
)

func main() {
	stdin := bufio.NewScanner(os.Stdin)
	for stdin.Scan() {
		l := strings.Split(stdin.Text(), " ")
		if l[0] == "0" {
			break
		}
		h, _ := strconv.Atoi(l[0])
		w, _ := strconv.Atoi(l[1])

		tile := make([][]rune, h)
		done := make([][]bool, h)
		for i := 0; i < h; i++ {
			stdin.Scan()
			s := stdin.Text()
			tile[i] = make([]rune, w)
			done[i] = make([]bool, w)
			for j, c := range s {
				tile[i][j] = c
			}
		}
		i, j := 0, 0
		for tile[i][j] != '.' {
			if done[i][j] {
				i = -1
				break
			}
			done[i][j] = true
			switch tile[i][j] {
			case '>':
				j++
			case '<':
				j--
			case '^':
				i--
			case 'v':
				i++
			}
		}
		if i < 0 {
			fmt.Println("LOOP")
		} else {
			fmt.Println(j, i)
		}
	}
}

C++: #include <iostream>
using namespace std;

#define RIGHT '>'
#define LEFT '<'
#define TOP '^'
#define UNDER 'v'
#define LOOP 'l'
#define END '.'
#define MAX 101

void dfs(char mp[MAX][MAX],int i,int j){
    if(mp[i][j]==END){
        cout << j << ' ' << i << endl;
        return;
    }
    if(mp[i][j]==LOOP){
        cout << "LOOP" << endl;
        return;
    }
    
    if(mp[i][j]==RIGHT){
        mp[i][j] = LOOP;
        dfs(mp,i,j+1);
    }
    else if(mp[i][j]==LEFT){
        mp[i][j] = LOOP;
        dfs(mp,i,j-1);
    }
    else if(mp[i][j]==TOP){
        mp[i][j] = LOOP;
        dfs(mp,i-1,j);
    }
    else{
        mp[i][j] = LOOP;
        dfs(mp,i+1,j);
    }
}


int main(){
    char mp[MAX][MAX];
    int n,m;
    
    while(true){
        cin >> n >> m;
        if(!n&&!m) break;
        
        for(int i = 0 ; i < n ; i++)
            for(int j = 0 ; j < m ; j++)
                cin >> mp[i][j];
        
        dfs(mp,0,0);
    }
    
    return 0;
}

C++: #include <iostream>
using namespace std;

char tile[150][150];
bool flag[150][150];

int solve(int x,int y){
	if(flag[x][y]) return -1;
	int ans;
	
	flag[x][y]=true;
	switch(tile[x][y]){
	case '>':
		ans=solve(x+1,y);
		break;
	case '<':
		ans=solve(x-1,y);
		break;
	case 'v':
		ans=solve(x,y+1);
		break;
	case '^':
		ans=solve(x,y-1);
		break;
	case '.':
		ans=x*1000+y;
		break;
	default:
		break;
	}
	return ans;
}

int main(){
	int W,H,ans;

	while(1){
		cin>>W>>H;
		if(W==0&&H==0) break;
	
		for(int i=0;i<H;i++){
			for(int j=0;j<W;j++){
				flag[j][i]=false;
			}
		}
		
		for(int i=0;i<H;i++){
			for(int j=0;j<W;j++){
				cin>>tile[j][i];
			}
		}
		
		if((ans=solve(0,0))==-1) cout<<"LOOP"<<endl;
		else cout<<ans/1000<<" "<<ans%1000<<endl;
	}
	
	return 0;
}

C++: #include <iostream>
using namespace std;
int main(){
    while(true){
    char a[100][100];
    int h,w,n=0;
    cin>>h>>w;
    if(h==0 && w==0){
        exit(0);
    }
    for(int i=0;i<h;i++){
        for(int j=0;j<w;j++){
            cin>>a[i][j];
        }
    }
    h=0;
    w=0;
    n=0;
    while(true){
        n+=1;
        if(a[h][w]=='.'){
            break;
        }
        if(a[h][w]=='>'){
            w+=1;
        }
        if(a[h][w]=='<'){
            w-=1;
        }
        if(a[h][w]=='^'){
            h-=1;
        }
        if(a[h][w]=='v'){
            h+=1;
        }
        if(n==10001){
            break;
        }
    }
    if(n==10001){
        cout<<"LOOP"<<endl;
    }
    else{
        cout<<w<<" "<<h<<endl;
    }
}
}

C++: #include <iostream>
using namespace std ;

#define MAX_MURAI 102

int main()
{
	int XX,YY ;

	char map[MAX_MURAI][MAX_MURAI] ;
	int memory[MAX_MURAI][MAX_MURAI] ;

	int x,y ;


	while( 1 )
	{
		cin >> YY >> XX ;		/* H * W */
		if( YY == 0 && XX == 0 )		break ;

		for( int i = 0 ; i < YY ; i ++ )
		{
			cin >> map[i] ;
			for( int j = 0 ; j < XX ; j ++ ){ memory[i][j] = 0 ; }
		}

		x = 0 ;
		y = 0 ;

		while( 1 )
		{
			memory[x][y] = 100000 ;
			if( map[x][y] == '.' )
			{
				cout << x << " " << y << endl ;
				break ;
			}
			else if( map[x][y] == '>' ){ y ++ ; }
			else if( map[x][y] == 'v' ){ x ++ ; }
			else if( map[x][y] == '<' ){ y -- ; }
			else if( map[x][y] == '^' ){ x -- ; }

			if( memory[x][y] != 0 )
			{
				cout << "LOOP" << endl ;
				break ;
			}
		}
	}

	return 0 ;
}

C++: #include <iostream>
#include <set>
#define PI pair<int,int>
using namespace std;
char m[101][101];
int main()
{
  int h,w,i,j;
  for(;;){
    cin >> h >> w;
    if(h==0 && w==0) break;
    for(i=0;i<h;i++){
      cin >> m[i];
    }
    i = j = 0;
    set< PI > s;
    s.insert(PI(i,j));
    for(;;){
      if(m[i][j] == '.') {
	cout << j << " " << i << endl;
	break;
      }
      switch(m[i][j]){
      case '>': j++; break;
      case '<': j--; break;
      case '^': i--; break;
      case 'v': i++; break;
      }
      if(s.find(PI(i,j)) != s.end()){
	cout << "LOOP" << endl;
	break;
      }
      s.insert(PI(i,j));
    }
  }
  return 0;
}

C++: #include <iostream>
#include <cstdio>
#include <string>
using namespace std;

int main(){
	int w,h;
	while(cin>>w>>h )
	{
		if(h==0 && w==0)break;
		char mass[102][102];
		bool key[102][102];

		for( int i=0; i<h; i++) {
			for( int j=0; j<w; j++){
				cin>>mass[i][j];
				key[i][j]=false;
			}
		}
		w=0,h=0;
		while(1)
		{
			key[h][w]=true;
			if( mass[h][w] == '>' ) w++;
			else if( mass[h][w] == '<' ) w--;
			else if( mass[h][w] == '^' ) h--;
			else if( mass[h][w] == 'v' ) h++;
			else {
				cout<<w<<" "<<h<<endl;
				break;
			}
			
			if(key[h][w]) {
				puts("LOOP");
				break;
			}
		}
	}

	return 0;
}

C++: #include<iostream>
#include<cstdio>
#include<algorithm>
#include<climits>
#include<string>
#include<vector>
#include<list>
#include<map>
#include<set>
#include<cmath>
#include<queue>
#include<cstring>
using namespace std;

const int dy[4]={-1,0,1,0},dx[4]={0,1,0,-1};

int main(){
	int H,W;
	while(cin>>H>>W,H||W){
		char fld[101][101];
		for(int i=0;i<H;i++){
			for(int j=0;j<W;j++){
				cin>>fld[i][j];
			}
		}
		int y=0,x=0;
		bool used[101][101]={},loop=false;
		while(true){
			if(used[y][x]==true){
				loop = true; break;
			}
			used[y][x] = true;
			char c = fld[y][x];
			int dir;
			if(c=='^') dir = 0;
			else if(c=='>') dir = 1;
			else if(c=='v') dir = 2;
			else if(c=='<') dir = 3;
			else break;
			y += dy[dir]; x += dx[dir];
		}
		if(loop==true) puts("LOOP");
		else printf("%d %d\n",x,y);
	}
    return 0;
}

C++: #include <iostream>

using namespace std;

char a[100][100];
int h,w;

int check( int x , int y ){

  if( a[x][y] == 'x' ){ // すでに訪れてるので終了
    cout << "LOOP" << endl;
    return 0;
  }
  else if( a[x][y] == '.' ){ // .だとループするこはないので終了
    cout << y << " " << x<< endl;
    return 0;
  } 

  else if( a[x][y] == '>' ){
    a[x][y] = 'x'; // 訪れたところにはxを入れる
    check( x , y + 1);
  }
  else if( a[x][y] == '<' ){
    a[x][y] = 'x'; // 訪れたところにはxを入れる
    check( x , y - 1 );
  }
  else if( a[x][y] == '^' ){
    a[x][y] = 'x'; // 訪れたところにはxを入れる
    check( x - 1, y );
  }
  else if( a[x][y] == 'v' ){
    a[x][y] = 'x'; // 訪れたところにはxを入れる
    check( x + 1 , y );
  }

}


int main(void){

  while( cin >> h >> w , h || w ){

    for( int i = 0 ; i < h ; i++ ){
      for( int j = 0 ; j < w ; j++ ){
	cin >> a[i][j]; // 読み込み
      }
    }

    check( 0 , 0 );

    // for( int i = 0 ; i < h ; i++ ){
    // for( int j = 0 ; j < w ; j++ ){
    //	cout << a[i][j];
    // }
    // cout << endl;
    //}

  }
  return 0;
}