Problem:
パトロール

文久２（1862）年、会津の殿様が京都守護職を命ぜられました。京都守護職とは治安の悪化した幕末の京都を守る大切な役目です。幕府や他の藩と分担して市中をパトロールしなければなりません。ところがいざ分担ルートを決める段になって、家臣の中でも有名な頑固者の古老から以下のような注文がつきました。

大変なことになりました。殿様といえどもこの家臣の言い分を無視するわけにはいきません。分担ルートの選択によっては、「武士の面目が立たない」ということになってしまいます。

ということで、スタート地点、ゴール地点、交差点の情報を入力として、上の三つの条件を満たすかどうかを判定するプログラムを作って、殿様に献上してください。

スタート地点を 1、ゴール地点を2、その他の交差点を 3 以上の整数で表します。1つの道路は、その道が結ぶ1組の交差点番号で表します。なお、交差点の数は 100 以下とし、全ての交差点からスタート地点およびゴール地点への経路がそれぞれ一つ以上あるものとします。

入力

複数のデータセットが与えられます。各データセットは以下の形式で与えられます。

a1 b1
a2 b2
：
：
0 0

各行の２つの整数は、交差点 ai と交差点 bi とをつなぐ道路が存在することを示します。
ai と bi がともに 0 のとき交差点情報の入力の終わりを示します。

データセットの数は50を超えません。

出力

各データセットに対して、武士の面目が立つ場合（三つの条件を満たす場合）OK、それ以外の場合（三つの条件を満たさない場合）NG と１行に出力してください。

Sample Input

1 3
3 4
3 5
3 6
4 6
4 7
4 7
5 6
6 7
5 8
5 8
6 8
6 9
7 9
8 9
9 2
0 0
1 3
3 4
3 4
4 2
0 0

Output for the Sample Input

OK
NG

Solution in Ruby (judge verdict: Wrong Answer)

class Edge
  attr_accessor :dest, :weight
  def initialize dest, weight
    @dest = dest
    @weight = weight
  end
end


class Graph
  def initialize n
    @n = n + 1
    @adjenceList = []
    @n.times do |i|
      @adjenceList[i] = []
    end
  end

  def addEdge i, j, weight
    edge1 = Edge.new j, weight
    @adjenceList[i] << edge1

    edge2 = Edge.new i, weight
    @adjenceList[j] << edge2
  end

  def menboku
    kiten_count = 0
    @n.times do |i|
      is_kiten = @adjenceList[i].length % 2 == 1
      if is_kiten
        kiten_count += 1
      end
    end

    if kiten_count == 0 || kiten_count == 2
      puts "OK"
    else
      puts "NG"
    end
  end

  def printMatrix
    matrix = []
    @n.times do |i|
      matrix[i] = []
      @n.times do |j|
        matrix[i][j] = 0
      end
    end

    @n.times do |i|
      @adjenceList[i].each do |edge|
        matrix[i][edge.dest] = 1
      end
    end

    matrix.each do |row|
      count = 0
      row.each do |i|
        if count == 0
          print i
          count += 1
        else
          print " ", i
        end
      end
      puts ""
    end
  end
end

# graph.printMatrix

first = -1
last = -1
count = 0
data_set = {}
STDIN.each_line {|line|
    n_m = line.split " "
    n = n_m[0].to_i
    n -= 1
    m = n_m[1].to_i
    m -= 1
if count == 0
  first = n
  count += 1
end

  if n == -1 && m == -1
      # 出力
      graph = Graph.new 100
      data_set.each do | key , val |
        val.each do |vertex|
          graph.addEdge key, vertex, 0
        end
      end
      if first == 0 && last == 1
        graph.menboku
      else
        puts "NG"
      end

      data_set.clear
      first = last = -1
      count = 0
  else
      if !data_set.has_key? n
        data_set[n] = []
      end
      data_set[n] << m
      last = m
  end
}