#include <bits/stdc++.h>
using namespace std;
long long mod = 1e9 + 7;
template <typename T>
T min(T a, T b, T c) {
  return min(a, min(b, c));
}
template <typename T>
T max(T a, T b, T c) {
  return max(a, max(b, c));
}
vector<pair<long long, long long>> traverse = {
    {1, 0}, {0, 1}, {-1, 0}, {0, -1}};
void read(string& s) {
  s.clear();
  cin >> s;
}
template <typename T>
void read(vector<T>& arr, long long N) {
  arr.clear();
  arr.resize(N);
  for (long long i = 0; i < N; i++) cin >> arr[i];
}
template <typename T>
void read(vector<vector<T>>& arr, long long N, long long M) {
  arr.clear();
  arr.resize(N, vector<T>(M));
  for (long long i = 0; i < N; i++) {
    for (long long j = 0; j < M; j++) cin >> arr[i][j];
  }
}
template <typename T>
void print(vector<T>& arr) {
  for (auto it : arr) cout << it << ' ';
  cout << endl;
}
template <typename T>
void print(vector<vector<T>>& arr) {
  for (auto it : arr) {
    for (auto ut : it) cout << ut;
    cout << endl;
  }
  cout << endl;
}
struct uf {
  vector<long long> par, size;
  void init(long long N) {
    par.resize(N, -1);
    size.resize(N, 1);
  }
  long long root(long long a) {
    if (par[a] == -1) return a;
    return par[a] = root(par[a]);
  }
  void unite(long long a, long long b) {
    a = root(a);
    b = root(b);
    if (a == b) return;
    if (size[a] < size[b]) {
      par[a] = b;
      size[b] += size[a];
    } else {
      par[b] = a;
      size[a] += size[b];
    }
  }
  bool same(long long a, long long b) {
    if (root(a) == root(b)) return true;
    return false;
  }
};
static bool comp(pair<long long, long long> a, pair<long long, long long> b) {
  if (a.first < b.first) return true;
  if (a.first == b.first) {
    if (a.second < b.second) return true;
  }
  return false;
}
long long N, M;
string st;
long long cnt;
string sol(long long& i) {
  string s = "";
  while (i < N and st[i] != '@') {
    s += st[i];
    i++;
  }
  if (i < N and !s.empty()) {
    s += st[i];
    --cnt;
    if (cnt == 0 and i + 1 < N) {
      i += 1;
      while (i < N) {
        s += st[i];
        i++;
      }
    } else if (i + 1 < N and st[i + 1] != '@') {
      i += 1;
      s += st[i];
    } else
      return "";
  } else
    return "";
  return s;
}
void solve() {
  cin >> st;
  cnt = 0;
  N = st.length();
  vector<string> ans;
  for (long long i = 0; i < N; i++)
    if (st[i] == '@') cnt++;
  long long i = 0;
  while (i < N) {
    string s = sol(i);
    if (s == "") {
      cout << "No solution" << endl;
      return;
    }
    ans.push_back(s);
    i++;
  }
  for (long long i = 0; i < (long long)ans.size(); i++) {
    if (i != (long long)ans.size() - 1)
      cout << ans[i] << ',';
    else
      cout << ans[i] << endl;
  }
}
signed main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  bool test = 0;
  if (!test)
    solve();
  else {
    long long tt;
    cin >> tt;
    while (tt--) solve();
  }
  return 0;
}
