Go: package main

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

func main() {
	scanner := bufio.NewScanner(os.Stdin)
	// var w, h int
	for scanner.Scan() {
		// fmt.Scanf("%d %d", &w, &h)

		input := strings.Split(scanner.Text(), " ")
		w, _ := strconv.Atoi(input[0])
		h, _ := strconv.Atoi(input[1])

		if w == 0 && h == 0 {
			return
		}

		isArrive := make([][]bool, w)
		tiles := make([][]string, w)

		for i := 0; i < w; i++ {
			rowArrive := make([]bool, h)
			rowTiles := make([]string, h)
			scanner.Scan()
			row := scanner.Text()
			for j := 0; j < h; j++ {
				rowTiles[j] = string(row[j])
			}
			tiles[i] = rowTiles
			isArrive[i] = rowArrive
		}

		var i, j int
		isEnd := false
		for {
			if isArrive[i][j] == true {
				fmt.Println("LOOP")
				break
			}
			isArrive[i][j] = true

			switch tiles[i][j] {
			case ">":
				j++
			case "^":
				i--
			case "v":
				i++
			case "<":
				j--
			case ".":
				isEnd = true
			}

			if isEnd == true {
				fmt.Println(j, i)
				break
			}
		}
	}
}

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;
}