#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:102400000,102400000")
using namespace std;
const int mo = 1000000007;
const int inf = 0x3f3f3f3f;
const int INF = 2000000000;
int T, n, m, sum;
int lt[1000], deg[1000], f[1000], dict[50000];
struct line {
  int u, v, nt, flag;
} eg[50000];
void add(int u, int v) {
  eg[++sum] = (line){u, v, lt[u], 0};
  lt[u] = sum;
  deg[v]++;
}
vector<int> vct;
queue<int> Q;
void dfs(int u) {
  Q.push(u);
  f[u] = 1;
  int v = 0;
  for (int i = lt[u]; i; i = eg[i].nt) {
    if (eg[i].flag) continue;
    eg[i].flag = eg[i ^ 1].flag = 1;
    dict[i / 2] = i;
    v = eg[i].v;
    lt[u] = i;
    break;
  }
  if (v != 0) dfs(v);
}
void work(int S) {
  while (!Q.empty()) Q.pop();
  Q.push(S);
  while (!Q.empty()) {
    int u = Q.front(), v = 0;
    Q.pop();
    for (int i = lt[u]; i; i = eg[i].nt) {
      if (eg[i].flag) continue;
      eg[i].flag = eg[i ^ 1].flag = 1;
      dict[i / 2] = i;
      v = eg[i].v;
      lt[u] = i;
      break;
    }
    if (v != 0) dfs(v);
  }
}
int main() {
  cin >> T;
  while (T--) {
    cin >> n >> m;
    int ans = n;
    for (int i = 1; i <= n; i++) deg[i] = lt[i] = 0;
    sum = 1;
    for (int i = 1; i <= m; i++) {
      int u, v;
      scanf("%d%d", &u, &v);
      add(u, v);
      add(v, u);
    }
    vct.clear();
    for (int i = 1; i <= n; i++)
      if (deg[i] & 1) {
        ans--;
        vct.push_back(i);
      }
    for (int i = 0; i < vct.size(); i += 2) {
      add(vct[i], vct[i + 1]);
      add(vct[i + 1], vct[i]);
    }
    memset(f, 0, sizeof(f));
    ;
    for (int i = 1; i <= n; i++)
      if (f[i] == 0) work(i);
    printf("%d\n", ans);
    for (int i = 1; i <= m; i++)
      printf("%d %d\n", eg[dict[i]].u, eg[dict[i]].v);
  }
}
