import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.util.Arrays;
import java.util.InputMismatchException;
import java.util.LinkedList;
import java.util.PriorityQueue;

 
public class Main {
  public static void main(String[] args) {
    InputReader sc = new InputReader(System.in);
 
    int n = sc.nextInt();
    int q = sc.nextInt();
    String[] names = new String[n];
    int[] lefttime = new int[n];
    for(int i = 0; i < n; i++){
      names[i] = sc.nextStr();
      lefttime[i] = sc.nextInt();
    }

    LinkedList<Integer> queue = new LinkedList<Integer>();
    for(int i = 0; i < n; i++){
      queue.add(i);
    }
    int nowtime = 0;
    while(!queue.isEmpty()){
      int nownum = queue.poll();
      if(lefttime[nownum] > q){
        lefttime[nownum] -= q;
        nowtime += q;
        queue.add(nownum);
      }else{
        nowtime += lefttime[nownum];
        System.out.print(names[nownum]);
        System.out.print(" ");
        System.out.println(nowtime);
      }
    }
  }
 
  
// LinkedList<Integer>[] setsu = new LinkedList[n];
// for(int i = 0; i < n; i++){
//   setsu[i] = new LinkedList<Integer>();
// } 

 //ここからテンプレ
  static class InputReader {
      private InputStream stream;
      private byte[] buf = new byte[1024];
      private int curChar;
      private int numChars;
      private SpaceCharFilter filter;

      public InputReader(InputStream stream) {
          this.stream = stream;
      }
 
      public int next() {
          if (numChars == -1)
              throw new InputMismatchException();
          if (curChar >= numChars) {
              curChar = 0;
              try {
                  numChars = stream.read(buf);
              } catch (IOException e) {
                  throw new InputMismatchException();
              }
              if (numChars <= 0)
                  return -1;
          }
          return buf[curChar++];
      }
 
      public String nextStr() {
        int c = next();
        while(isSpaceChar(c)){c = next();}
        StringBuffer str = new StringBuffer();
        do{
          str.append((char)c);
          c = next();
        }while(!isSpaceChar(c));
        return str.toString();
      }

      public int nextInt() {
          int c = next();
          while (isSpaceChar(c))
              c = next();
          int sgn = 1;
          if (c == '-') {
              sgn = -1;
              c = next();
          }
          int res = 0;
          do {
              if (c < '0' || c > '9')
                  throw new InputMismatchException();
              res *= 10;
              res += c - '0';
              c = next();
          } while (!isSpaceChar(c));
          return res * sgn;
      }
 
      public boolean isSpaceChar(int c) {
          if (filter != null)
              return filter.isSpaceChar(c);
          return c == ' ' || c == '\n' || c == '\r' || c == '\t' || c == -1;
      }
 
      public interface SpaceCharFilter {
          public boolean isSpaceChar(int ch);
      }
  }
} import java.io.IOException; IOException java.io import java.io.InputStream; InputStream java.io import java.io.PrintWriter; PrintWriter java.io import java.util.Arrays; Arrays java.util import java.util.InputMismatchException; InputMismatchException java.util import java.util.LinkedList; LinkedList java.util import java.util.PriorityQueue; PriorityQueue java.util public class Main {
  public static void main(String[] args) {
    InputReader sc = new InputReader(System.in);
 
    int n = sc.nextInt();
    int q = sc.nextInt();
    String[] names = new String[n];
    int[] lefttime = new int[n];
    for(int i = 0; i < n; i++){
      names[i] = sc.nextStr();
      lefttime[i] = sc.nextInt();
    }

    LinkedList<Integer> queue = new LinkedList<Integer>();
    for(int i = 0; i < n; i++){
      queue.add(i);
    }
    int nowtime = 0;
    while(!queue.isEmpty()){
      int nownum = queue.poll();
      if(lefttime[nownum] > q){
        lefttime[nownum] -= q;
        nowtime += q;
        queue.add(nownum);
      }else{
        nowtime += lefttime[nownum];
        System.out.print(names[nownum]);
        System.out.print(" ");
        System.out.println(nowtime);
      }
    }
  }
 
  
// LinkedList<Integer>[] setsu = new LinkedList[n];
// for(int i = 0; i < n; i++){
//   setsu[i] = new LinkedList<Integer>();
// } 

 //ここからテンプレ
  static class InputReader {
      private InputStream stream;
      private byte[] buf = new byte[1024];
      private int curChar;
      private int numChars;
      private SpaceCharFilter filter;

      public InputReader(InputStream stream) {
          this.stream = stream;
      }
 
      public int next() {
          if (numChars == -1)
              throw new InputMismatchException();
          if (curChar >= numChars) {
              curChar = 0;
              try {
                  numChars = stream.read(buf);
              } catch (IOException e) {
                  throw new InputMismatchException();
              }
              if (numChars <= 0)
                  return -1;
          }
          return buf[curChar++];
      }
 
      public String nextStr() {
        int c = next();
        while(isSpaceChar(c)){c = next();}
        StringBuffer str = new StringBuffer();
        do{
          str.append((char)c);
          c = next();
        }while(!isSpaceChar(c));
        return str.toString();
      }

      public int nextInt() {
          int c = next();
          while (isSpaceChar(c))
              c = next();
          int sgn = 1;
          if (c == '-') {
              sgn = -1;
              c = next();
          }
          int res = 0;
          do {
              if (c < '0' || c > '9')
                  throw new InputMismatchException();
              res *= 10;
              res += c - '0';
              c = next();
          } while (!isSpaceChar(c));
          return res * sgn;
      }
 
      public boolean isSpaceChar(int c) {
          if (filter != null)
              return filter.isSpaceChar(c);
          return c == ' ' || c == '\n' || c == '\r' || c == '\t' || c == -1;
      }
 
      public interface SpaceCharFilter {
          public boolean isSpaceChar(int ch);
      }
  }
} Main public static void main(String[] args) {
    InputReader sc = new InputReader(System.in);
 
    int n = sc.nextInt();
    int q = sc.nextInt();
    String[] names = new String[n];
    int[] lefttime = new int[n];
    for(int i = 0; i < n; i++){
      names[i] = sc.nextStr();
      lefttime[i] = sc.nextInt();
    }

    LinkedList<Integer> queue = new LinkedList<Integer>();
    for(int i = 0; i < n; i++){
      queue.add(i);
    }
    int nowtime = 0;
    while(!queue.isEmpty()){
      int nownum = queue.poll();
      if(lefttime[nownum] > q){
        lefttime[nownum] -= q;
        nowtime += q;
        queue.add(nownum);
      }else{
        nowtime += lefttime[nownum];
        System.out.print(names[nownum]);
        System.out.print(" ");
        System.out.println(nowtime);
      }
    }
  } main {
    InputReader sc = new InputReader(System.in);
 
    int n = sc.nextInt();
    int q = sc.nextInt();
    String[] names = new String[n];
    int[] lefttime = new int[n];
    for(int i = 0; i < n; i++){
      names[i] = sc.nextStr();
      lefttime[i] = sc.nextInt();
    }

    LinkedList<Integer> queue = new LinkedList<Integer>();
    for(int i = 0; i < n; i++){
      queue.add(i);
    }
    int nowtime = 0;
    while(!queue.isEmpty()){
      int nownum = queue.poll();
      if(lefttime[nownum] > q){
        lefttime[nownum] -= q;
        nowtime += q;
        queue.add(nownum);
      }else{
        nowtime += lefttime[nownum];
        System.out.print(names[nownum]);
        System.out.print(" ");
        System.out.println(nowtime);
      }
    }
  } InputReader sc = new InputReader(System.in); sc new InputReader(System.in) int n = sc.nextInt(); n sc.nextInt() sc.nextInt sc int q = sc.nextInt(); q sc.nextInt() sc.nextInt sc String[] names = new String[n]; names new String[n] n int[] lefttime = new int[n]; lefttime new int[n] n for(int i = 0; i < n; i++){
      names[i] = sc.nextStr();
      lefttime[i] = sc.nextInt();
    } int i = 0; int i = 0; i 0 i < n i n i++ i++ i {
      names[i] = sc.nextStr();
      lefttime[i] = sc.nextInt();
    } {
      names[i] = sc.nextStr();
      lefttime[i] = sc.nextInt();
    } names[i] = sc.nextStr() names[i] names i sc.nextStr() sc.nextStr sc lefttime[i] = sc.nextInt() lefttime[i] lefttime i sc.nextInt() sc.nextInt sc LinkedList<Integer> queue = new LinkedList<Integer>(); queue new LinkedList<Integer>() for(int i = 0; i < n; i++){
      queue.add(i);
    } int i = 0; int i = 0; i 0 i < n i n i++ i++ i {
      queue.add(i);
    } {
      queue.add(i);
    } queue.add(i) queue.add queue i int nowtime = 0; nowtime 0 while(!queue.isEmpty()){
      int nownum = queue.poll();
      if(lefttime[nownum] > q){
        lefttime[nownum] -= q;
        nowtime += q;
        queue.add(nownum);
      }else{
        nowtime += lefttime[nownum];
        System.out.print(names[nownum]);
        System.out.print(" ");
        System.out.println(nowtime);
      }
    } !queue.isEmpty() queue.isEmpty() queue.isEmpty queue {
      int nownum = queue.poll();
      if(lefttime[nownum] > q){
        lefttime[nownum] -= q;
        nowtime += q;
        queue.add(nownum);
      }else{
        nowtime += lefttime[nownum];
        System.out.print(names[nownum]);
        System.out.print(" ");
        System.out.println(nowtime);
      }
    } int nownum = queue.poll(); nownum queue.poll() queue.poll queue if(lefttime[nownum] > q){
        lefttime[nownum] -= q;
        nowtime += q;
        queue.add(nownum);
      }else{
        nowtime += lefttime[nownum];
        System.out.print(names[nownum]);
        System.out.print(" ");
        System.out.println(nowtime);
      } lefttime[nownum] > q lefttime[nownum] lefttime nownum q {
        lefttime[nownum] -= q;
        nowtime += q;
        queue.add(nownum);
      } lefttime[nownum] -= q lefttime[nownum] lefttime nownum q nowtime += q nowtime q queue.add(nownum) queue.add queue nownum {
        nowtime += lefttime[nownum];
        System.out.print(names[nownum]);
        System.out.print(" ");
        System.out.println(nowtime);
      } nowtime += lefttime[nownum] nowtime lefttime[nownum] lefttime nownum System.out.print(names[nownum]) System.out.print System.out System System.out names[nownum] names nownum System.out.print(" ") System.out.print System.out System System.out " " System.out.println(nowtime) System.out.println System.out System System.out nowtime String[] args args  static class InputReader {
      private InputStream stream;
      private byte[] buf = new byte[1024];
      private int curChar;
      private int numChars;
      private SpaceCharFilter filter;

      public InputReader(InputStream stream) {
          this.stream = stream;
      }
 
      public int next() {
          if (numChars == -1)
              throw new InputMismatchException();
          if (curChar >= numChars) {
              curChar = 0;
              try {
                  numChars = stream.read(buf);
              } catch (IOException e) {
                  throw new InputMismatchException();
              }
              if (numChars <= 0)
                  return -1;
          }
          return buf[curChar++];
      }
 
      public String nextStr() {
        int c = next();
        while(isSpaceChar(c)){c = next();}
        StringBuffer str = new StringBuffer();
        do{
          str.append((char)c);
          c = next();
        }while(!isSpaceChar(c));
        return str.toString();
      }

      public int nextInt() {
          int c = next();
          while (isSpaceChar(c))
              c = next();
          int sgn = 1;
          if (c == '-') {
              sgn = -1;
              c = next();
          }
          int res = 0;
          do {
              if (c < '0' || c > '9')
                  throw new InputMismatchException();
              res *= 10;
              res += c - '0';
              c = next();
          } while (!isSpaceChar(c));
          return res * sgn;
      }
 
      public boolean isSpaceChar(int c) {
          if (filter != null)
              return filter.isSpaceChar(c);
          return c == ' ' || c == '\n' || c == '\r' || c == '\t' || c == -1;
      }
 
      public interface SpaceCharFilter {
          public boolean isSpaceChar(int ch);
      }
  } InputReader private InputStream stream; stream private byte[] buf = new byte[1024]; buf new byte[1024] 1024 private int curChar; curChar private int numChars; numChars private SpaceCharFilter filter; filter public InputReader(InputStream stream) {
          this.stream = stream;
      } InputReader {
          this.stream = stream;
      } this.stream = stream this.stream this this.stream stream InputStream stream stream public int next() {
          if (numChars == -1)
              throw new InputMismatchException();
          if (curChar >= numChars) {
              curChar = 0;
              try {
                  numChars = stream.read(buf);
              } catch (IOException e) {
                  throw new InputMismatchException();
              }
              if (numChars <= 0)
                  return -1;
          }
          return buf[curChar++];
      } next {
          if (numChars == -1)
              throw new InputMismatchException();
          if (curChar >= numChars) {
              curChar = 0;
              try {
                  numChars = stream.read(buf);
              } catch (IOException e) {
                  throw new InputMismatchException();
              }
              if (numChars <= 0)
                  return -1;
          }
          return buf[curChar++];
      } if (numChars == -1)
              throw new InputMismatchException(); numChars == -1 numChars -1 1 throw new InputMismatchException(); new InputMismatchException() if (curChar >= numChars) {
              curChar = 0;
              try {
                  numChars = stream.read(buf);
              } catch (IOException e) {
                  throw new InputMismatchException();
              }
              if (numChars <= 0)
                  return -1;
          } curChar >= numChars curChar numChars {
              curChar = 0;
              try {
                  numChars = stream.read(buf);
              } catch (IOException e) {
                  throw new InputMismatchException();
              }
              if (numChars <= 0)
                  return -1;
          } curChar = 0 curChar 0 try {
                  numChars = stream.read(buf);
              } catch (IOException e) {
                  throw new InputMismatchException();
              } catch (IOException e) {
                  throw new InputMismatchException();
              } IOException e {
                  throw new InputMismatchException();
              } throw new InputMismatchException(); new InputMismatchException() {
                  numChars = stream.read(buf);
              } numChars = stream.read(buf) numChars stream.read(buf) stream.read stream buf if (numChars <= 0)
                  return -1; numChars <= 0 numChars 0 return -1; -1 1 return buf[curChar++]; buf[curChar++] buf curChar++ curChar public String nextStr() {
        int c = next();
        while(isSpaceChar(c)){c = next();}
        StringBuffer str = new StringBuffer();
        do{
          str.append((char)c);
          c = next();
        }while(!isSpaceChar(c));
        return str.toString();
      } nextStr {
        int c = next();
        while(isSpaceChar(c)){c = next();}
        StringBuffer str = new StringBuffer();
        do{
          str.append((char)c);
          c = next();
        }while(!isSpaceChar(c));
        return str.toString();
      } int c = next(); c next() next while(isSpaceChar(c)){c = next();} isSpaceChar(c) isSpaceChar c {c = next();} c = next() c next() next StringBuffer str = new StringBuffer(); str new StringBuffer() do{
          str.append((char)c);
          c = next();
        }while(!isSpaceChar(c)); !isSpaceChar(c) isSpaceChar(c) isSpaceChar c {
          str.append((char)c);
          c = next();
        } str.append((char)c) str.append str (char)c c = next() c next() next return str.toString(); str.toString() str.toString str public int nextInt() {
          int c = next();
          while (isSpaceChar(c))
              c = next();
          int sgn = 1;
          if (c == '-') {
              sgn = -1;
              c = next();
          }
          int res = 0;
          do {
              if (c < '0' || c > '9')
                  throw new InputMismatchException();
              res *= 10;
              res += c - '0';
              c = next();
          } while (!isSpaceChar(c));
          return res * sgn;
      } nextInt {
          int c = next();
          while (isSpaceChar(c))
              c = next();
          int sgn = 1;
          if (c == '-') {
              sgn = -1;
              c = next();
          }
          int res = 0;
          do {
              if (c < '0' || c > '9')
                  throw new InputMismatchException();
              res *= 10;
              res += c - '0';
              c = next();
          } while (!isSpaceChar(c));
          return res * sgn;
      } int c = next(); c next() next while (isSpaceChar(c))
              c = next(); isSpaceChar(c) isSpaceChar c c = next() c next() next int sgn = 1; sgn 1 if (c == '-') {
              sgn = -1;
              c = next();
          } c == '-' c '-' {
              sgn = -1;
              c = next();
          } sgn = -1 sgn -1 1 c = next() c next() next int res = 0; res 0 do {
              if (c < '0' || c > '9')
                  throw new InputMismatchException();
              res *= 10;
              res += c - '0';
              c = next();
          } while (!isSpaceChar(c)); !isSpaceChar(c) isSpaceChar(c) isSpaceChar c {
              if (c < '0' || c > '9')
                  throw new InputMismatchException();
              res *= 10;
              res += c - '0';
              c = next();
          } if (c < '0' || c > '9')
                  throw new InputMismatchException(); c < '0' || c > '9' c < '0' c '0' c > '9' c '9' throw new InputMismatchException(); new InputMismatchException() res *= 10 res 10 res += c - '0' res c - '0' c '0' c = next() c next() next return res * sgn; res * sgn res sgn public boolean isSpaceChar(int c) {
          if (filter != null)
              return filter.isSpaceChar(c);
          return c == ' ' || c == '\n' || c == '\r' || c == '\t' || c == -1;
      } isSpaceChar {
          if (filter != null)
              return filter.isSpaceChar(c);
          return c == ' ' || c == '\n' || c == '\r' || c == '\t' || c == -1;
      } if (filter != null)
              return filter.isSpaceChar(c); filter != null filter null return filter.isSpaceChar(c); filter.isSpaceChar(c) filter.isSpaceChar filter c return c == ' ' || c == '\n' || c == '\r' || c == '\t' || c == -1; c == ' ' || c == '\n' || c == '\r' || c == '\t' || c == -1 c == '\t' c == '\r' c == ' ' || c == '\n' || c == '\r' || c == '\t' || c == -1 c == ' ' c ' ' c == '\n' c '\n' c == '\r' c '\r' c == '\t' c '\t' c == -1 c -1 1 int c c public interface SpaceCharFilter {
          public boolean isSpaceChar(int ch);
      } SpaceCharFilter public boolean isSpaceChar(int ch); isSpaceChar int ch ch public class Main {
  public static void main(String[] args) {
    InputReader sc = new InputReader(System.in);
 
    int n = sc.nextInt();
    int q = sc.nextInt();
    String[] names = new String[n];
    int[] lefttime = new int[n];
    for(int i = 0; i < n; i++){
      names[i] = sc.nextStr();
      lefttime[i] = sc.nextInt();
    }

    LinkedList<Integer> queue = new LinkedList<Integer>();
    for(int i = 0; i < n; i++){
      queue.add(i);
    }
    int nowtime = 0;
    while(!queue.isEmpty()){
      int nownum = queue.poll();
      if(lefttime[nownum] > q){
        lefttime[nownum] -= q;
        nowtime += q;
        queue.add(nownum);
      }else{
        nowtime += lefttime[nownum];
        System.out.print(names[nownum]);
        System.out.print(" ");
        System.out.println(nowtime);
      }
    }
  }
 
  
// LinkedList<Integer>[] setsu = new LinkedList[n];
// for(int i = 0; i < n; i++){
//   setsu[i] = new LinkedList<Integer>();
// } 

 //ここからテンプレ
  static class InputReader {
      private InputStream stream;
      private byte[] buf = new byte[1024];
      private int curChar;
      private int numChars;
      private SpaceCharFilter filter;

      public InputReader(InputStream stream) {
          this.stream = stream;
      }
 
      public int next() {
          if (numChars == -1)
              throw new InputMismatchException();
          if (curChar >= numChars) {
              curChar = 0;
              try {
                  numChars = stream.read(buf);
              } catch (IOException e) {
                  throw new InputMismatchException();
              }
              if (numChars <= 0)
                  return -1;
          }
          return buf[curChar++];
      }
 
      public String nextStr() {
        int c = next();
        while(isSpaceChar(c)){c = next();}
        StringBuffer str = new StringBuffer();
        do{
          str.append((char)c);
          c = next();
        }while(!isSpaceChar(c));
        return str.toString();
      }

      public int nextInt() {
          int c = next();
          while (isSpaceChar(c))
              c = next();
          int sgn = 1;
          if (c == '-') {
              sgn = -1;
              c = next();
          }
          int res = 0;
          do {
              if (c < '0' || c > '9')
                  throw new InputMismatchException();
              res *= 10;
              res += c - '0';
              c = next();
          } while (!isSpaceChar(c));
          return res * sgn;
      }
 
      public boolean isSpaceChar(int c) {
          if (filter != null)
              return filter.isSpaceChar(c);
          return c == ' ' || c == '\n' || c == '\r' || c == '\t' || c == -1;
      }
 
      public interface SpaceCharFilter {
          public boolean isSpaceChar(int ch);
      }
  }
} public class Main {
  public static void main(String[] args) {
    InputReader sc = new InputReader(System.in);
 
    int n = sc.nextInt();
    int q = sc.nextInt();
    String[] names = new String[n];
    int[] lefttime = new int[n];
    for(int i = 0; i < n; i++){
      names[i] = sc.nextStr();
      lefttime[i] = sc.nextInt();
    }

    LinkedList<Integer> queue = new LinkedList<Integer>();
    for(int i = 0; i < n; i++){
      queue.add(i);
    }
    int nowtime = 0;
    while(!queue.isEmpty()){
      int nownum = queue.poll();
      if(lefttime[nownum] > q){
        lefttime[nownum] -= q;
        nowtime += q;
        queue.add(nownum);
      }else{
        nowtime += lefttime[nownum];
        System.out.print(names[nownum]);
        System.out.print(" ");
        System.out.println(nowtime);
      }
    }
  }
 
  
// LinkedList<Integer>[] setsu = new LinkedList[n];
// for(int i = 0; i < n; i++){
//   setsu[i] = new LinkedList<Integer>();
// } 

 //ここからテンプレ
  static class InputReader {
      private InputStream stream;
      private byte[] buf = new byte[1024];
      private int curChar;
      private int numChars;
      private SpaceCharFilter filter;

      public InputReader(InputStream stream) {
          this.stream = stream;
      }
 
      public int next() {
          if (numChars == -1)
              throw new InputMismatchException();
          if (curChar >= numChars) {
              curChar = 0;
              try {
                  numChars = stream.read(buf);
              } catch (IOException e) {
                  throw new InputMismatchException();
              }
              if (numChars <= 0)
                  return -1;
          }
          return buf[curChar++];
      }
 
      public String nextStr() {
        int c = next();
        while(isSpaceChar(c)){c = next();}
        StringBuffer str = new StringBuffer();
        do{
          str.append((char)c);
          c = next();
        }while(!isSpaceChar(c));
        return str.toString();
      }

      public int nextInt() {
          int c = next();
          while (isSpaceChar(c))
              c = next();
          int sgn = 1;
          if (c == '-') {
              sgn = -1;
              c = next();
          }
          int res = 0;
          do {
              if (c < '0' || c > '9')
                  throw new InputMismatchException();
              res *= 10;
              res += c - '0';
              c = next();
          } while (!isSpaceChar(c));
          return res * sgn;
      }
 
      public boolean isSpaceChar(int c) {
          if (filter != null)
              return filter.isSpaceChar(c);
          return c == ' ' || c == '\n' || c == '\r' || c == '\t' || c == -1;
      }
 
      public interface SpaceCharFilter {
          public boolean isSpaceChar(int ch);
      }
  }
} Main
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.util.Arrays;
import java.util.InputMismatchException;
import java.util.LinkedList;
import java.util.PriorityQueue;

 
public class Main {
  public static void main(String[] args) {
    InputReader sc = new InputReader(System.in);
 
    int n = sc.nextInt();
    int q = sc.nextInt();
    String[] names = new String[n];
    int[] lefttime = new int[n];
    for(int i = 0; i < n; i++){
      names[i] = sc.nextStr();
      lefttime[i] = sc.nextInt();
    }

    LinkedList<Integer> queue = new LinkedList<Integer>();
    for(int i = 0; i < n; i++){
      queue.add(i);
    }
    int nowtime = 0;
    while(!queue.isEmpty()){
      int nownum = queue.poll();
      if(lefttime[nownum] > q){
        lefttime[nownum] -= q;
        nowtime += q;
        queue.add(nownum);
      }else{
        nowtime += lefttime[nownum];
        System.out.print(names[nownum]);
        System.out.print(" ");
        System.out.println(nowtime);
      }
    }
  }
 
  
// LinkedList<Integer>[] setsu = new LinkedList[n];
// for(int i = 0; i < n; i++){
//   setsu[i] = new LinkedList<Integer>();
// } 

 //ここからテンプレ
  static class InputReader {
      private InputStream stream;
      private byte[] buf = new byte[1024];
      private int curChar;
      private int numChars;
      private SpaceCharFilter filter;

      public InputReader(InputStream stream) {
          this.stream = stream;
      }
 
      public int next() {
          if (numChars == -1)
              throw new InputMismatchException();
          if (curChar >= numChars) {
              curChar = 0;
              try {
                  numChars = stream.read(buf);
              } catch (IOException e) {
                  throw new InputMismatchException();
              }
              if (numChars <= 0)
                  return -1;
          }
          return buf[curChar++];
      }
 
      public String nextStr() {
        int c = next();
        while(isSpaceChar(c)){c = next();}
        StringBuffer str = new StringBuffer();
        do{
          str.append((char)c);
          c = next();
        }while(!isSpaceChar(c));
        return str.toString();
      }

      public int nextInt() {
          int c = next();
          while (isSpaceChar(c))
              c = next();
          int sgn = 1;
          if (c == '-') {
              sgn = -1;
              c = next();
          }
          int res = 0;
          do {
              if (c < '0' || c > '9')
                  throw new InputMismatchException();
              res *= 10;
              res += c - '0';
              c = next();
          } while (!isSpaceChar(c));
          return res * sgn;
      }
 
      public boolean isSpaceChar(int c) {
          if (filter != null)
              return filter.isSpaceChar(c);
          return c == ' ' || c == '\n' || c == '\r' || c == '\t' || c == -1;
      }
 
      public interface SpaceCharFilter {
          public boolean isSpaceChar(int ch);
      }
  }
}