import java.util.*;
public class Main {

  public static void main (String[] args) {

    Scanner sc = new Scanner(System.in);
    int N = sc.nextInt();
    int D = sc.nextInt();
    int[][] X = new int[N][D];
    for (int i = 0; i < N; i++) {
      for (int j = 0; j < D; j++) {
        X[i][j] = sc.nextInt();
      }
    }
    sc.close();

    int count = 0;
    double distance = 0.0;

    for (int i = 0; i < N; i++) {
      for (int j = i; j < N; j++){
        if (i != j){
          distance = 0.0;
          for (int k = 0; k < D; k++) {
            distance += (X[i][k] - X[j][k]) * (X[i][k] - X[j][k]);
          }
          if (Math.sqrt(distance) % 1 == 0){
            count++;
          }
        }
      }
    }
    
    System.out.println(count);

  }
  
} import java.util.*; util.* java public class Main {

  public static void main (String[] args) {

    Scanner sc = new Scanner(System.in);
    int N = sc.nextInt();
    int D = sc.nextInt();
    int[][] X = new int[N][D];
    for (int i = 0; i < N; i++) {
      for (int j = 0; j < D; j++) {
        X[i][j] = sc.nextInt();
      }
    }
    sc.close();

    int count = 0;
    double distance = 0.0;

    for (int i = 0; i < N; i++) {
      for (int j = i; j < N; j++){
        if (i != j){
          distance = 0.0;
          for (int k = 0; k < D; k++) {
            distance += (X[i][k] - X[j][k]) * (X[i][k] - X[j][k]);
          }
          if (Math.sqrt(distance) % 1 == 0){
            count++;
          }
        }
      }
    }
    
    System.out.println(count);

  }
  
} Main public static void main (String[] args) {

    Scanner sc = new Scanner(System.in);
    int N = sc.nextInt();
    int D = sc.nextInt();
    int[][] X = new int[N][D];
    for (int i = 0; i < N; i++) {
      for (int j = 0; j < D; j++) {
        X[i][j] = sc.nextInt();
      }
    }
    sc.close();

    int count = 0;
    double distance = 0.0;

    for (int i = 0; i < N; i++) {
      for (int j = i; j < N; j++){
        if (i != j){
          distance = 0.0;
          for (int k = 0; k < D; k++) {
            distance += (X[i][k] - X[j][k]) * (X[i][k] - X[j][k]);
          }
          if (Math.sqrt(distance) % 1 == 0){
            count++;
          }
        }
      }
    }
    
    System.out.println(count);

  } main {

    Scanner sc = new Scanner(System.in);
    int N = sc.nextInt();
    int D = sc.nextInt();
    int[][] X = new int[N][D];
    for (int i = 0; i < N; i++) {
      for (int j = 0; j < D; j++) {
        X[i][j] = sc.nextInt();
      }
    }
    sc.close();

    int count = 0;
    double distance = 0.0;

    for (int i = 0; i < N; i++) {
      for (int j = i; j < N; j++){
        if (i != j){
          distance = 0.0;
          for (int k = 0; k < D; k++) {
            distance += (X[i][k] - X[j][k]) * (X[i][k] - X[j][k]);
          }
          if (Math.sqrt(distance) % 1 == 0){
            count++;
          }
        }
      }
    }
    
    System.out.println(count);

  } Scanner sc = new Scanner(System.in); sc new Scanner(System.in) int N = sc.nextInt(); N sc.nextInt() sc.nextInt sc int D = sc.nextInt(); D sc.nextInt() sc.nextInt sc int[][] X = new int[N][D]; X new int[N][D] N D for (int i = 0; i < N; i++) {
      for (int j = 0; j < D; j++) {
        X[i][j] = sc.nextInt();
      }
    } int i = 0; int i = 0; i 0 i < N i N i++ i++ i {
      for (int j = 0; j < D; j++) {
        X[i][j] = sc.nextInt();
      }
    } {
      for (int j = 0; j < D; j++) {
        X[i][j] = sc.nextInt();
      }
    } for (int j = 0; j < D; j++) {
        X[i][j] = sc.nextInt();
      } int j = 0; int j = 0; j 0 j < D j D j++ j++ j {
        X[i][j] = sc.nextInt();
      } {
        X[i][j] = sc.nextInt();
      } X[i][j] = sc.nextInt() X[i][j] X[i] X i j sc.nextInt() sc.nextInt sc sc.close() sc.close sc int count = 0; count 0 double distance = 0.0; distance 0.0 for (int i = 0; i < N; i++) {
      for (int j = i; j < N; j++){
        if (i != j){
          distance = 0.0;
          for (int k = 0; k < D; k++) {
            distance += (X[i][k] - X[j][k]) * (X[i][k] - X[j][k]);
          }
          if (Math.sqrt(distance) % 1 == 0){
            count++;
          }
        }
      }
    } int i = 0; int i = 0; i 0 i < N i N i++ i++ i {
      for (int j = i; j < N; j++){
        if (i != j){
          distance = 0.0;
          for (int k = 0; k < D; k++) {
            distance += (X[i][k] - X[j][k]) * (X[i][k] - X[j][k]);
          }
          if (Math.sqrt(distance) % 1 == 0){
            count++;
          }
        }
      }
    } {
      for (int j = i; j < N; j++){
        if (i != j){
          distance = 0.0;
          for (int k = 0; k < D; k++) {
            distance += (X[i][k] - X[j][k]) * (X[i][k] - X[j][k]);
          }
          if (Math.sqrt(distance) % 1 == 0){
            count++;
          }
        }
      }
    } for (int j = i; j < N; j++){
        if (i != j){
          distance = 0.0;
          for (int k = 0; k < D; k++) {
            distance += (X[i][k] - X[j][k]) * (X[i][k] - X[j][k]);
          }
          if (Math.sqrt(distance) % 1 == 0){
            count++;
          }
        }
      } int j = i; int j = i; j i j < N j N j++ j++ j {
        if (i != j){
          distance = 0.0;
          for (int k = 0; k < D; k++) {
            distance += (X[i][k] - X[j][k]) * (X[i][k] - X[j][k]);
          }
          if (Math.sqrt(distance) % 1 == 0){
            count++;
          }
        }
      } {
        if (i != j){
          distance = 0.0;
          for (int k = 0; k < D; k++) {
            distance += (X[i][k] - X[j][k]) * (X[i][k] - X[j][k]);
          }
          if (Math.sqrt(distance) % 1 == 0){
            count++;
          }
        }
      } if (i != j){
          distance = 0.0;
          for (int k = 0; k < D; k++) {
            distance += (X[i][k] - X[j][k]) * (X[i][k] - X[j][k]);
          }
          if (Math.sqrt(distance) % 1 == 0){
            count++;
          }
        } i != j i j {
          distance = 0.0;
          for (int k = 0; k < D; k++) {
            distance += (X[i][k] - X[j][k]) * (X[i][k] - X[j][k]);
          }
          if (Math.sqrt(distance) % 1 == 0){
            count++;
          }
        } distance = 0.0 distance 0.0 for (int k = 0; k < D; k++) {
            distance += (X[i][k] - X[j][k]) * (X[i][k] - X[j][k]);
          } int k = 0; int k = 0; k 0 k < D k D k++ k++ k {
            distance += (X[i][k] - X[j][k]) * (X[i][k] - X[j][k]);
          } {
            distance += (X[i][k] - X[j][k]) * (X[i][k] - X[j][k]);
          } distance += (X[i][k] - X[j][k]) * (X[i][k] - X[j][k]) distance (X[i][k] - X[j][k]) * (X[i][k] - X[j][k]) (X[i][k] - X[j][k]) X[i][k] X[i] X i k X[j][k] X[j] X j k (X[i][k] - X[j][k]) X[i][k] X[i] X i k X[j][k] X[j] X j k if (Math.sqrt(distance) % 1 == 0){
            count++;
          } Math.sqrt(distance) % 1 == 0 Math.sqrt(distance) % 1 Math.sqrt(distance) Math.sqrt Math distance 1 0 {
            count++;
          } count++ count System.out.println(count) System.out.println System.out System System.out count String[] args args public class Main {

  public static void main (String[] args) {

    Scanner sc = new Scanner(System.in);
    int N = sc.nextInt();
    int D = sc.nextInt();
    int[][] X = new int[N][D];
    for (int i = 0; i < N; i++) {
      for (int j = 0; j < D; j++) {
        X[i][j] = sc.nextInt();
      }
    }
    sc.close();

    int count = 0;
    double distance = 0.0;

    for (int i = 0; i < N; i++) {
      for (int j = i; j < N; j++){
        if (i != j){
          distance = 0.0;
          for (int k = 0; k < D; k++) {
            distance += (X[i][k] - X[j][k]) * (X[i][k] - X[j][k]);
          }
          if (Math.sqrt(distance) % 1 == 0){
            count++;
          }
        }
      }
    }
    
    System.out.println(count);

  }
  
} public class Main {

  public static void main (String[] args) {

    Scanner sc = new Scanner(System.in);
    int N = sc.nextInt();
    int D = sc.nextInt();
    int[][] X = new int[N][D];
    for (int i = 0; i < N; i++) {
      for (int j = 0; j < D; j++) {
        X[i][j] = sc.nextInt();
      }
    }
    sc.close();

    int count = 0;
    double distance = 0.0;

    for (int i = 0; i < N; i++) {
      for (int j = i; j < N; j++){
        if (i != j){
          distance = 0.0;
          for (int k = 0; k < D; k++) {
            distance += (X[i][k] - X[j][k]) * (X[i][k] - X[j][k]);
          }
          if (Math.sqrt(distance) % 1 == 0){
            count++;
          }
        }
      }
    }
    
    System.out.println(count);

  }
  
} Main
import java.util.*;
public class Main {

  public static void main (String[] args) {

    Scanner sc = new Scanner(System.in);
    int N = sc.nextInt();
    int D = sc.nextInt();
    int[][] X = new int[N][D];
    for (int i = 0; i < N; i++) {
      for (int j = 0; j < D; j++) {
        X[i][j] = sc.nextInt();
      }
    }
    sc.close();

    int count = 0;
    double distance = 0.0;

    for (int i = 0; i < N; i++) {
      for (int j = i; j < N; j++){
        if (i != j){
          distance = 0.0;
          for (int k = 0; k < D; k++) {
            distance += (X[i][k] - X[j][k]) * (X[i][k] - X[j][k]);
          }
          if (Math.sqrt(distance) % 1 == 0){
            count++;
          }
        }
      }
    }
    
    System.out.println(count);

  }
  
}