Go: package main

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

var (
	sc = bufio.NewScanner(os.Stdin)
)

func main() {
	for sc.Scan() {
		if sc.Text() == "0 0" {
			break
		}
		chunks := strings.Split(sc.Text(), " ")
		n, _ := strconv.Atoi(chunks[0])
		r, _ := strconv.Atoi(chunks[1])
		cards := make([]int, n, n)
		for i := 0; i < n; i++ {
			cards[i] = n - i
		}
		for i := 0; i < r; i++ {
			sc.Scan()
			chunks := strings.Split(sc.Text(), " ")
			p, _ := strconv.Atoi(chunks[0])
			c, _ := strconv.Atoi(chunks[1])
			block := make([]int, c, c)
			for j := 0; j < c; j++ {
				block[j] = cards[p+j-1]
			}
			for j := p - 2; j >= 0; j-- {
				cards[j+c] = cards[j]
			}
			for j := 0; j < c; j++ {
				cards[j] = block[j]
			}
		}
		fmt.Println(cards[0])
	}
}

C++: #include <iostream>
#include <string>
#include <array>
#include <vector>
#include <math.h>
#include <algorithm>
#include <set>
#include <deque>
#include <utility>
#include <queue>

#define MAX 100005
#define ll long long int
using namespace std;

int main(void) 
{
	int n, r;
	int i, j;
	vector <int> ans, p, c;
	int temp1, temp2;

	vector <int> huda(55);

	queue <int> temp; //????????????????´???????

	while (1) {
		cin >> n >> r;
		if (n == 0 && r == 0) {
			break;
		}

		for (i = 0; i < r; i++) {
			cin >> temp1 >> temp2;
			p.push_back(temp1);
			c.push_back(temp2);
		}

		huda[0] = 0;

		for (i = n; i > 0; i--) { //?????????????¨????
			huda[n - i + 1] = i;


		}

		for (i = 0; i < r; i++) {

			for (j = 0; j < c[i]; j++) {
				temp.push(huda[p[i] + j]); 
			}

			for (j = p[i] + c[i] - 1; j > c[i]; j--) {
				huda[j] = huda[j - c[i]]; // ??±???????????¨???
			}

			for (j = 1; j <= c[i]; j++) {
				huda[j] = temp.front();
				temp.pop();

			}



		}

		ans.push_back(huda[1]);

		p.clear();
		c.clear();

		


	}



	 
	for (i = 0; i < ans.size(); i++) {
		cout << ans[i] << endl;
	}


	return (0);
}

C++: #include <iostream>
#include <math.h>
#include <algorithm>
#include <string>
using namespace std;




int main(int argc, const char * argv[])
{
    int n, r;
    while(cin >> n >> r){
        if(n == 0 || r == 0) return 0;
        
        int cards[n];
        int next[n];
        
        for(int i = 0; i < n; i++){
            cards[i] = n - i;
        }
        
        // 　DEBUG
        /*
        for(int i = 0; i < n; i++){
            cout << cards[i] << " ";
        }
        cout << "\n";
        */
        
        int p, c;
        for(int i = 0; i < r; i++){
            cin >> p >> c;
            int j = 0;
            for(j = 0; j < c; j++){
                next[j] = cards[p+j-1];
            }
            for(int k = 0; k < p-1; k++){
                next[j] = cards[k];
                j++;
            }
            for(;j < n; j++){
                next[j] = cards[j];
            }
            
            for(int j = 0; j < n; j++){
                cards[j] = next[j];
            }
            /*
            for(int i = 0; i < n; i++){
                cout << cards[i] << " ";
            }
            cout << "\n";
             */
        }
        
        cout << cards[0] << "\n";
    }
    return 0;
}

C++: #include <iostream>
#include <cmath>
#include <algorithm>

using namespace std;

int main(){
	while(true){
		int n,r;
		cin >> n >> r;
		if (n == 0 && r == 0) break;
		int cards[2][n];
		for (int i=0;i<n;++i){
			cards[0][i] = n-i;
			cards[1][i] = n-i;
		}
		for (int i=0;i<r;++i){
			int f = i%2;
			int t = (i+1)%2;
			int p,c;
			cin >> p >> c;
			for (int l=0;l<p-1;++l){
				cards[t][l+c] = cards[f][l];
			}
			for (int l=p-1;l<p+c-1;++l){
				cards[t][l-(p-1)] = cards[f][l];
			}
		}
		int t = r%2;
		cout << cards[t][0] << endl;
	}
	return 0;
}

C++: #include <iostream>
#include <cmath>
#include <utility>
#include <functional>
#include <math.h>
#include <algorithm>
#include <iomanip>
#include <vector>
#include <string>
#include <set>
#include <map>
#include <tuple>
#include <stdlib.h>
#include <deque>
using namespace std;
#define rep(i,n,x) for(int i=n;i<x;i++)
#define rem(i,n,x) for(int i=n;i>x;i--)
#define SORT(x) sort(x.begin(),x.end())
#define REV(x) reverse(x.begin(),x.end())
#define all(x) x.begin(),x.end()
#define pb push_back
#define mp make_pair
#define setp(x) setprecision(x)
using LL = long long;
using ULL = unsigned long long;

int main() {
	int n, r;
	cin >> n >> r;

	while (n != 0) {
		// カードの山を作成
		deque<int> card(n);
		rep(i, 0, n) card.push_front(i + 1);
		// シャッフル
		pair<deque<int>, deque<int>> pa;
		rep(i, 0, r) {
			int p, c;
			cin >> p >> c;
			// cardの上からp-1枚をとってpa.firstに入れる
			rep(i, 0, p - 1) {
				pa.first.pb(card.front());
				card.pop_front();
			}
			// cardの上からc枚をとってpa.secondに入れる
			rep(i, 0, c) {
				pa.second.pb(card.front());
				card.pop_front();
			}
			// pa.firstの末尾をcardの先頭に入れる
			while(!pa.first.empty()) {
				card.push_front(pa.first.back());
				pa.first.pop_back();
			}
			// pa.secondの末尾をcardの先頭に入れる
			while(!pa.second.empty()){
				card.push_front(pa.second.back());
				pa.second.pop_back();
			}
		}

		cout << card.front() << endl;

		cin >> n >> r;
	}

	return 0;
}

C++: //rotateも何も知らず、また頂いたPDFもまともに読まないまま知っている知識のみで解いた結果です。
//少なくとも提出してAcceptは出ています。
//「きれいなプログラム」がどんなものかまだ把握できていないため、この点に関してもご指摘等頂ければと思います。
//千田 直輝

#include<iostream>

#define R input[0][1]

using namespace std;

int getTop() {
	int input[51][2];

	/*入力*/
	cin >> input[0][0] >> input[0][1];								//まずnとrを受け取る。
	if (input[0][0] == 0 && input[0][1] == 0) {						//n=r=0なら0を返して関数終了。
		return 0;
	}
	for (char pos = 1; pos <= input[0][1]; pos++) {					//シャッフルの仕方をr回分入力
		cin >> input[pos][0] >> input[pos][1];
	}

	/*シャッフルもどし*/
	int whtop = 1;													//最後一番上にいるカードは、今何番目にいる？
	if (R==0)return input[0][0];									//一回もシャッフルしないならコレ
	while (input[0][1] != 0) {	
		if (whtop <= input[R][1]) whtop = whtop + input[R][0] - 1;
		else if ((input[R][0] + input[R][1] - 1) < whtop) whtop = whtop;
		else whtop = whtop - input[R][1];
		R--;
	}
	return input[0][0] - whtop + 1;

}


int main()
{
	while (1) {
		int check;
		check = getTop();
		if (check == 0)break;
		else cout << check << endl;
	}
}

C++: #include<iostream>
#include<string>
#include<vector>
#include<algorithm>
#include<cstdio>
using namespace std;
int main(){
  int maisu[50];
  int katto;
  int swap[50];
  int p,c;
  int i,j=0;
  int test;
  for(i=0; i<50; i++){
    maisu[i] = i;
  }
  cout << maisu[0] << endl;
  cin >> katto;
  // while(j <= katto){
    while(true){
      scanf("%d%d",&p,&c);
      if(p == 0 && c == 0){break;}
      for(i=0; i<c; i++){
	swap[i] = maisu[i + p-1];
      }
      for(i = 0; i<p-1; i++){
	swap[i+c] = maisu[i];
      }
      for(i=0;i<p+c-1; i++){
	maisu[i] = swap[i];
      }
    }
    // if(p == 0 && c == 0){
	// break;
    }
  // }
    cout << maisu[0] << endl;
    return 0;
}

C++: using namespace std;

int main(){
    int n,r,p,c,a[50];

    while(cin >> n >> r,n||r){
        for(int i=0;i<n;i++){
            a[i] = n-i;
        }

        for(int i=0;i<r;i++){
            cin >> p >> c;
            rotate(a,a+p-1,a+p+c-1);
        }
    cout << a[0] << endl;
    }

    return 0;

}

C++: #include <bits/stdc++.h>
using namespace std;

int main(void){
  vector<int> f;
  while(1){
    f.clear();
    int n, r, p, c;
    cin >> n >> r;
    if(n == 0 && r == 0) return 0;
    for(int i=n; i > 0; i--){
      f.push_back(i);
    }


    vector<int> t;
    for(int i=0; i < r; i++){
      cin >> p >> c;
      t.clear();
      for(int j=p-1; j < p+c-1; j++){
        t.push_back(f.at(j));
      }
      for(int j=p-1; j > 0; j--){
        f.at(j+c-1) = f.at(j-1);
      }
      for(int j=0; j < c; j++){
        f.at(j) = t.at(j);
      }


    }
    cout << f.front() << endl;
  }
}