Problem:
Score : 400 points

Problem Statement

For an integer N, we will choose a permutation \{P_1, P_2, ..., P_N\} of \{1, 2, ..., N\}.

Then, for each i=1,2,...,N, let M_i be the remainder when i is divided by P_i.

Find the maximum possible value of M_1 + M_2 + \cdots + M_N.

Constraints

N is an integer satisfying 1 \leq N \leq 10^9.

Input

Input is given from Standard Input in the following format:

N

Output

Print the maximum possible value of M_1 + M_2 + \cdots + M_N.

Sample Input 1

2

Sample Output 1

1

When the permutation \{P_1, P_2\} = \{2, 1\} is chosen, M_1 + M_2 = 1 + 0 = 1.

Sample Input 2

13

Sample Output 2

78

Sample Input 3

1

Sample Output 3

0

Solution in Go (1.6) (judge verdict: Runtime Error)

package main

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

// AtCoder Functions
var sc = bufio.NewScanner(os.Stdin)

func nextString() string {
	sc.Scan()
	return sc.Text()
}
func nextInt() int {
	sc.Scan()
	i, e := strconv.Atoi(sc.Text())
	if e != nil {
		panic(e)
	}
	return i
}
func nextFloat64() float64 {
	sc.Scan()
	f, e := strconv.ParseFloat(sc.Text(), 64)
	if e != nil {
		panic(e)
	}
	return f
}
func contains(s []int, e int) bool {
	for _, v := range s {
		if e == v {
			return true
		}
	}
	return false
}

func unshift(element int, slice []int) []int {
	slice = append(slice[:1], slice[:]...)
	slice[0] = element
	return slice
}
func spliceInsert(index int, element int, slice []int) []int {
	slice = append(slice[:index+1], slice[index:]...)
	slice[index] = element
	return slice
}
func spliceRemove(index int, slice []int) []int {
	slice = append(slice[:index], slice[index+1:]...)
	return slice
}
func stringToSlice(str string) []string {
	return strings.Split(str, "")
}

func main() {
	// 文字列を読む混む場合は1行の文字数が最大でも640000文字以下になることを確認する
	sc.Split(bufio.ScanWords)
	N := nextInt()

	A := make([]int, N)
	for i := 0; i < N; i++ {
		A[i] = i + 1
	}

	ret := 0
	for i := 0; i < N; i++ {
		ret += i % A[i]
	}
	fmt.Println(ret)
}