Problem:
Score : 100 points

Problem Statement

There are three airports A, B and C, and flights between each pair of airports in both directions.

A one-way flight between airports A and B takes P hours, a one-way flight between airports B and C takes Q hours, and a one-way flight between airports C and A takes R hours.

Consider a route where we start at one of the airports, fly to another airport and then fly to the other airport.

What is the minimum possible sum of the flight times?

Constraints

1 \leq P,Q,R \leq 100

All values in input are integers.

Input

Input is given from Standard Input in the following format:

P Q R

Output

Print the minimum possible sum of the flight times.

Sample Input 1

1 3 4

Sample Output 1

4

The sum of the flight times in the route A \rightarrow B \rightarrow C: 1 + 3 = 4 hours

The sum of the flight times in the route A \rightarrow C \rightarrow C: 4 + 3 = 7 hours

The sum of the flight times in the route B \rightarrow A \rightarrow C: 1 + 4 = 5 hours

The sum of the flight times in the route B \rightarrow C \rightarrow A: 3 + 4 = 7 hours

The sum of the flight times in the route C \rightarrow A \rightarrow B: 4 + 1 = 5 hours

The sum of the flight times in the route C \rightarrow B \rightarrow A: 3 + 1 = 4 hours

The minimum of these is 4 hours.

Sample Input 2

3 2 3

Sample Output 2

5

Solution in Java8 (OpenJDK 1.8.0) (judge verdict: Accepted)

import java.io.*;
import java.util.*;


public class Main {

    public static void main(String[] args) throws IOException {
        InputStream inputStream = System.in;
        OutputStream outputStream = System.out;
        InputReader in = new InputReader(inputStream);
        InputReader.OutputWriter out = new InputReader.OutputWriter(outputStream);


        int a = in.nextInt();
        int b = in.nextInt();
        int c = in.nextInt();
        int min = Math.min(Math.min(a+b,b+c),c+a);
        out.println(min);
        out.flush();
    }
    private static int bfs(char[][] c, int i, int j,int length,boolean[][] visited) {
        LinkedList<Point> q = new LinkedList<>();
        q.add(new Point(i,j));
        int distance = 0;
        while (!q.isEmpty()) {
            int size = q.size();
            for (int k = 0; k < size; k++) {
                Point current = q.pollFirst();
                visited[current.getI()][current.getJ()] = true;
                int up = current.getI() - 1;
                if (up >=0) {
                    if(!visited[up][current.getJ()]) {
                        if(c[up][current.getJ()] == 'Y') return distance + 1;
                        else q.add(new Point(up,current.getJ()));
                    }
                }
                int down = current.getI() + 1;
                if (down<c.length) {
                    if(!visited[down][current.getJ()]) {
                        if (c[down][current.getJ()] == 'Y') return distance + 1;
                        else q.add(new Point(down, current.getJ()));
                    }
                }
                int left = current.getJ() - 1;
                if (left>=0) {
                    if(!visited[current.getI()][left]) {
                        if (c[current.getI()][left] == 'Y') return distance + 1;
                        else q.add(new Point(current.getI(), left));
                    }
                }
                int right = current.getJ() + 1;
                if(right<c[i].length) {
                    if(!visited[current.getI()][right]) {
                        if (c[current.getI()][right] == 'Y') return distance + 1;
                        else q.add(new Point(current.getI(), right));
                    }
                }
            }
            distance++;
        }
        return Integer.MAX_VALUE;
    }


}
class Point {
    private int i;
    private int j;

    public int getI() {
        return i;
    }

    public int getJ() {
        return j;
    }
    public Point(int i, int j) {
        this.i = i;
        this.j = j;
    }
}


class InputReader extends BufferedReader {
    StringTokenizer tokenizer;

    public InputReader(InputStream inputStream) {
        super(new InputStreamReader(inputStream), 32768);
    }

    public InputReader(String filename) {
        super(new InputStreamReader(Thread.currentThread().getContextClassLoader().getResourceAsStream(filename)));
    }

    public String next() {
        while (tokenizer == null || !tokenizer.hasMoreTokens()) {
            try {
                tokenizer = new StringTokenizer(readLine());
            } catch (IOException e) {
                throw new RuntimeException();
            }
        }
        return tokenizer.nextToken();
    }

    public Integer nextInt() {
        return Integer.valueOf(next());
    }
    public Long nextLong() {return  Long.valueOf(next());}

    static class OutputWriter extends PrintWriter {
        public OutputWriter(OutputStream outputStream) {
            super(outputStream);
        }

        public OutputWriter(Writer writer) {
            super(writer);
        }

        public OutputWriter(String filename) throws FileNotFoundException {
            super(filename);
        }

        public void close() {
            super.close();
        }
    }
}