#include <bits/stdc++.h>
using namespace std;
const long long linf = 1e18 + 5;
const int mod = (int)1e9 + 7;
const int inf = 1e9;
long long read() {
  bool minus = false;
  long long result = 0;
  char ch;
  ch = getchar();
  while (true) {
    if (ch == '-') break;
    if (ch >= '0' && ch <= '9') break;
    ch = getchar();
  }
  if (ch == '-')
    minus = true;
  else
    result = ch - '0';
  while (true) {
    ch = getchar();
    if (ch < '0' || ch > '9') break;
    result = result * 10 + (ch - '0');
  }
  if (minus) {
    return -result;
  } else {
    return result;
  }
}
long long fpow(long long base, long long power) {
  long long result = 1;
  while (power > 0) {
    if (power % 2 == 1) result = (result * base);
    base = (base * base);
    power /= 2;
  }
  return result;
}
bool vis[400], mark[400 * 400];
int degree[400], n, m, cnt[400];
vector<pair<int, int> > adj[400];
map<pair<int, int>, bool> umark;
vector<int> ans, odd;
set<int> st[400];
void dfs(int node) {
  vis[node] = 1;
  while (cnt[node] < adj[node].size()) {
    cnt[node]++;
    if (mark[adj[node][cnt[node] - 1].second])
      continue;
    else
      mark[adj[node][cnt[node] - 1].second] = 1,
                                 dfs(adj[node][cnt[node] - 1].first);
  }
  ans.push_back(node);
}
void eulerTour() {
  for (int j = 1; j <= n; j++) {
    if (!vis[j]) {
      vis[j] = 1;
      dfs(j);
    }
  }
}
void solve() {
  int i;
  scanf("%d %d", &n, &m);
  for (i = 0; i <= n + 1; i++) adj[i].clear(), st[i].clear(), cnt[i] = 0;
  memset(degree, 0, sizeof(degree));
  memset(mark, 0, sizeof(mark));
  umark.clear();
  for (i = 0; i < m; i++) {
    int u, v;
    scanf("%d %d", &u, &v);
    adj[u].push_back(make_pair(v, i));
    adj[v].push_back(make_pair(u, i));
    degree[u]++;
    degree[v]++;
    mark[i] = 0;
    st[u].insert(v);
    st[v].insert(u);
  }
  odd.clear();
  ans.clear();
  int res = 0, x = m;
  for (i = 1; i <= n; i++) {
    res += 1 - (degree[i] % 2);
    if (degree[i] % 2) odd.push_back(i);
  }
  for (i = 0; i < odd.size(); i++) {
    adj[odd[i]].push_back(make_pair(0, x));
    adj[0].push_back(make_pair(odd[i], x++));
  }
  memset(vis, 0, sizeof(vis));
  eulerTour();
  if (ans.size() > 0) reverse(ans.begin(), ans.end());
  printf("%d\n", res);
  ;
  for (i = 0; i < ans.size() - 1; i++) {
    if (st[ans[i]].find(ans[i + 1]) != st[ans[i]].end()) {
      printf("%d %d\n", ans[i], ans[i + 1]);
    }
  }
}
int main() {
  int t;
  scanf("%d", &t);
  while (t--) {
    solve();
  }
  return 0;
}
