Problem:
Drawing Lots

Let's play Amidakuji.

In the following example, there are five vertical lines and four horizontal lines. The horizontal lines can intersect (jump across) the vertical lines.

In the starting points (top of the figure), numbers are assigned to vertical lines in ascending order from left to right. At the first step, 2 and 4 are swaped by the first horizontal line which connects second and fourth vertical lines (we call this operation (2, 4)). Likewise, we perform (3, 5), (1, 2) and (3, 4), then obtain "4 1 2 5 3" in the bottom.

Your task is to write a program which reads the number of vertical lines w and configurations of horizontal lines and prints the final state of the Amidakuji. In the starting pints, numbers 1, 2, 3, ..., w are assigne to the vertical lines from left to right.

Input

w
n
a1,b1
a2,b2
.
.
an,bn

w (w ≤ 30) is the number of vertical lines. n (n ≤ 30) is the number of horizontal lines. A pair of two integers ai and bi delimited by a comma represents the i-th horizontal line.

Output

The number which should be under the 1st (leftmost) vertical line

The number which should be under the 2nd vertical line

:

The number which should be under the w-th vertical line

Sample Input

5
4
2,4
3,5
1,2
3,4

Output for the Sample Input

4
1
2
5
3

Solution in Ruby (judge verdict: Accepted)

y = gets.chomp.to_i  #横棒の数
t = gets.chomp.to_i  #縦棒の数

arr = Array.new(y){|i| i + 1}  #または arr = (1..y).to_a でも可能

t.times do
    a,b = gets.split(",").map{|item| item.to_i}
    d = arr[b-1]
    arr[b-1] = arr[a-1]
    arr[a-1] = d
    #このバブルソートの方法を使ってもできるし、
    #arr[a-1], arr[b-1] = arr[b-1], arr[a-1]
    #この方法でも可能
end

arr.each do |n|
    puts n
end
    

#Array.new(Array)メソッド : 新しい配列を返す

#(例1)
#Array.new(size,obj) : sizeには配列のサイズ(要素数)を入れる。
#sizeを指定しなければ空の配列になる
#objを指定すると、新しい配列をそのオブジェクトで埋めることができる。
#objを指定しなければnilで埋まる。

#arr = Array.new
#p arr　　　　　　　→　[]
#arr = Array.new(4)
#p arr　　　　　　　→　[nil, nil, nil, nil]
#arr = Array.new(4, "hello")
#p arr　　　　　　　→　["hello", "hello", "hello", "hello"]

#(例2)
#Array.new(size) {|idx| block } : 引数objの代わりにブロックを渡すと、
#sizeの数だけブロックを繰り返し、ブロックが返す値を配列の要素する。

#arr = Array.new(10) {|idx| 2 ** idx }
#p arr　　　　→　[1, 2, 4, 8, 16, 32, 64, 128, 256, 512]

#(例3)
#Array.new(array) : newメソッドの引数に配列を指定すると、その配列をコピーした新しい配列を返す

#arr = Array.new(["dog", "mouse", "cat"])
#p arr　　　　→　["dog", "mouse", "cat"]

#puts arr[1]　→　mouse
#arr[2] = "rabbit"
#puts arr[2]　→　rabbit



#to_a(Array)メソッド : Array に変換したものを返す

#(例)
#def cat(a1, a2)
#  a1.to_a + a2.to_a
#end
#p cat([1, 2, 3], 4..6)
#→　[1, 2, 3, 4, 5, 6]

#(1..5).to_a　　→　 [1,2,3,4,5]
#(1..10).map{|i| i*2}　　→　[2, 4, 6, 8, 10, 12, 14, 16, 18, 20]


#復帰文字，改行文字を取り除く chomp 
#文字列の切り出しは split("区切り文字") 

#スペース区切りの2つの数値を浮動小数点として変数b,cに読み込む
#b,c=gets.split(" ").map(&:to_f)


#変数 aを改行込みで出力する．
#print("#{a}\n")
#puts a
#変数 aを小数点以下10桁で改行込みで出力
#printf("%.10f\n",a) 
#配列 aをスペース区切りで出力
#puts a.join(" ")