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(" ")
